忙了一个多星期,都基本没什么时间写Laravel5.3相关的使用笔记了,今天趁有点空闲就写关于“响应”的吧。
参考官方英文文档,laravel 5.3响应部分:https://laravel.com/docs/5.3/responses
一. 基本使用
在laravel5.3中响应最简单的用法就是使用 return,如:
Route::get('/', function () {
return 'Hello World';
});
这样,就会在浏览器上看到“hello world”;
那么如果是return一个数组或对象的话,如下:
Route::get('/', function () {
return ["hello"=>"world"];
}
这样,框架就会将该数据以json形式输出,输出结果为:{“hello”:”world”}
二. 使用Response对象构造响应结果
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
如上所示,就构造了一个由指定内容和三个指定header组成的Response对象了。
当然,laravel的Response的API也提供了另外一个类似的用法(本人感觉多此一举),如下:
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
对了,响应除了header和content外,应该还可以携带cookie啊,于是Response就可以这样使用cookie了:
return response($content)
->header('Content-Type', $type)
->cookie('name', 'value', $minutes);
这里的cookie函数本来有7个形参,函数定义如下:
//name如果为null则返回空cookie对象
//minutes默认为0
//后面五个参数可以缺省,其中httponly默认为true
->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
注意:laravel如果使用了中间件App\Http\Middleware\EncryptCookies,就会将cookie的值进行编码,编码后客户端是不能看到cookie的值的。但是我们可以选择不加载这个中间件,或者说在该中间件中指明哪些cookie键值不被编码,用法如下:
protected $except = [
'cookie_name', //这里填入不被编码的cookie;
];
三. 重定向
框架提供了将相应重定向到另外一个路由的用法,简单的使用如:
Route::get('路由1', function () {
return redirect('路由2');
});
也可以将响应定义为返回之前的页面:
Route::get('路由1', function () {
return back()->withInput();
});
或者说重定向框架中已经定义好的路由:
return redirect()->route('自定义路由别名',['键值1' => 参数1]);
或者说重定向到指定的控制器:
return redirect()->action('HomeController@index');
或
return redirect()->action(
'HomeController@index', ['id' => 1]
);
或者说先把指定数据以session存储起来,再重定向:
//重定向前:
return redirect('dashboard')->with('status', 'Profile updated!');
//目标路由行为:
echo session('status');
四. 其他形式的相应
1.JSON相应
return response()->json([
'name' => 'Abigail',
'state' => 'CA'
]);
2.视图相应
return response()
->view('hello', $data, 200)
->header('Content-Type', $type);
//或者使用全局view函数:
return view("模板命名”,模板传递参数);
3.JSONP响应
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));
注意:JSONP是利用浏览器中JS/CSS能跨域访问的机制来实现跨域数据请求的。
4.文件下载响应
//name & header can be ignored
return response()->download($pathToFile, $name, $headers);
5.文件内容响应
//header can be ignored
return response()->file($pathToFile, $headers);
好了,laravel基础使用方法(路由、中间件、控制器、请求、响应)都基本看了一遍,而视图和blade模板就不多说了。
接下来需要进一步学习下laravel的框架思想和其他一些服务用法。