继上篇Laravel RESTful快速部署指南(一) 之后,让我们继续完成一个简单的Laravel RESTful。
开发环境:Windows+XAMPP
代码下载: https://github.com/gmszone/learingphp
编辑器: Sublime Text3(Crack)
转载保留: (转载自Phodal's Blog Phodal's CSDN)
显示资源show()->GET
也就是show函数负责的这部分,生成的控制器里面是这样描述的。
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
那么我们只需要指对我们需要的id,生成对应的json数据就可以了。
这个就比较简单了,
public function show($id)
{
//$myid=Athomes::find($id);
$maxid=Athomes::where('id','=',$id)
->select('id','temperature','sensors1','sensors2','led1')
->get();
return Response::json($maxid);
}
用上面的find($id)可以生成对对应id的值。但是有时候我们并不需要所有的数据,比如created_at
{"id":1,"temperature":12,"sensors1":12,"sensors2":23,"led1":0,"created_at":"2013-11-11 08:42:24","updated_at":"2013-11-11 08:42:24"}
于是我们就需要用where和select来处理这些数据,使之变成,
{
id: 1,
temperature: 12,
sensors1: 12,
sensors2: 23,
led1: 0,
created_at: "2013-11-11 08:42:24",
updated_at: "2013-11-11 08:42:24"
}
用curl来测试一下
curl http://localhost/learingphp/public/athome/1
构建Create()->POST
这里就需要的是我们来对数据进行,处理了。在运行Post的时候,首先我们要制定规则,用来验证用的。
$rules = array(
'led1'=>'required',
'sensors1' => 'required|numeric|Min:-50|Max:80',
'sensors2' => 'required|numeric|Min:-50|Max:80',
'temperature' => 'required|numeric|Min:-50|Max:80'
);
$validator = Validator::make(Input::all(), $rules);
这部分参考了来自于这篇博文所写的
http://scotch.io/tutorials/simple-laravel-crud-with-resource-controllers
验证通过再存储这些数据,完整的store函数如下
public function store()
{
$rules = array(
'led1'=>'required',
'sensors1' => 'required|numeric|Min:-50|Max:80',
'sensors2' => 'required|numeric|Min:-50|Max:80',
'temperature' => 'required|numeric|Min:-50|Max:80'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('athome/create')
->withErrors($validator);
} else {
// store
$nerd = new Athomes;
$nerd->sensors1 = Input::get('sensors1');
$nerd->sensors2 = Input::get('sensors2');
$nerd->temperature = Input::get('temperature');
$nerd->led1 = Input::get('led1');
$nerd->save();
}
}
测试POST
这里用的是python,网上找的车轮子,因为我试了很多遍curl,最后还是失败了。json数据为
{"temperature":19,"sensors1":22,"sensors2":7.5,"led1":1}
程序如下,,网上copy的。
import urllib
import urllib2
def post(url, data):
req = urllib2.Request(url)
data = urllib.urlencode(data)
#enable cookie
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
response = opener.open(req, data)
return response.read()
def main():
posturl = "http://localhost/learingphp/public/athome"
data = {"temperature":19,"sensors1":22,"sensors2":7.5,"led1":1}
print post(posturl, data)
if __name__ == '__main__':
main()
运行结果如下所示:
删除destory()->DELETE
删除就比较简单了,删除指定id的就行了。。目测是这样子,但是id就变得不连续了,这个在后期写ajax的时候会很吃力的节奏。
public function destroy($id)
{
// delete
$athome = Athomes::find($id);
$athome->delete();
}
用curl来测试一下,DELETE,那就DELETE id=1吧
curl -X DELETE http://localhost/learingphp/public/athome/1
再GET一下,就没有了、
更新update()->PUT
代码如下,这里就不再多解释了。
public function update($id)
{
$rules = array(
'led1'=>'required|',
'sensors1' => 'required|numeric|Min:-50|Max:80',
'sensors2' => 'required|numeric|Min:-50|Max:80',
'temperature' => 'required|numeric|Min:-50|Max:80'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('athome/' . $id . '/edit')
->withErrors($validator);
} else {
// store
$nerd = Athomes::find($id);
$nerd->sensors1 = Input::get('sensors1');
$nerd->sensors2 = Input::get('sensors2');
$nerd->temperature = Input::get('temperature');
$nerd->led1 = Input::get('led1');
$nerd->save();
}
}