官网文档传送门:处理用户请求 —— HTTP 响应、重定向
响应
HTTP响应就是服务器在接受到客户端的请求,所作出的一系列回应;
Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串或者数组,框架会自动吧数组转换为一个JSON响应;
例如:
//返回字符串
Route::get('re',function(){
return 'asb';
});//output:asb
//返回数组
Route::get('re',function(){
return ['name' => 'zs','age'=>13];
});//outpu:{"name":"zs","age":13}
Response对象
Illuminate\Http\Response实例继承自 Symfony\Component\HttpFoundation\Response 基类,该类提供了一系列方法用于创建 HTTP 响应;
Route::get('re',function(){
return response ('hello world',200)->header('Content-Type','text/plain');
});//output:hello world,该响应的Content-Type为text/plain
header()函数是添加响应头到响应,withHeaders([])函数添加一个响应头数组到相应
Route::get('re',function(Illuminate\Http\Response $response){
return $response->withHeaders([
'Content-Type' => 'html',
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
});
出现withHeader不存在错误是吧respons引错了
结果如下:
image.png
cookie
添加cookie到响应
return $response->cookie('name','username');
在浏览器中查看结果如下:
cookie
发现name的值是一些无用的字母,是因为Laravel已经对cookie加密了
从请求中取出cookie
$request->cookie('name');
cookie解密
Laravel 框架生成的 Cookie 都经过了加密和签名,以免在客户端被篡改。如果你想要让特定的 Cookie 子集在生成时取消加密,可以通过 app/Http/Middleware 目录下的中间件 App\Http\Middleware\EncryptCookies 提供的 $except 属性来排除这些 Cookie
protected $except = [
'name',
];
排除之后如下:
重定向 redirect()
//重定向到某个url
return redirect('url');
//重定向到上个请求位置
return back();
//重定向到命名路由
return redirect()->route('路由名称');
//通过Eloquent模型 填充参数,传递模型本身,可自动解析id,其实就相当于传递id
return redirect()->route('路由名',[Eloquent模型]);
//重定向到控制器动作
return redirect()->action('PostController@index');
//带一次session数据重定向
return redirect ->()->with('status','Profile update!');
响应宏
如果你想要定义一个自定义的可以在多个路由和控制器中复用的响应,可以使用 Response 门面上的 macro 方法。
创建服务提供者:
php artisan make:provider ResponseMacroServiceProvider
boot方法
public function boot()
{
Response::macro('caps', function ($value) {
return Response::make(strtoupper($value));
});
}
注册服务提供者:
config/app.php
.
.
'providers' => [
.
.
App\Providers\ResponseMacroServiceProvider::class,
],
.
.
路由
Route::get('macro/response', function() {
return response()->caps('LaravelAcademy');
});
访问:http://localhost:8000/macro/response
响应宏其实就是创建以来一个人人都可以调用的响应。
网友评论