Laravel—响应
响应
所有路由、控制器处理完业务逻辑之后都会返回一个发送到用户浏览器的响应,Laravel提供多种不同的方式来获取响应,将数组转化为JSON响应
字符串 & 数组
直接在函数中使用return
返回,框架会自动将字符串转换为一个完整的HTTP响应
Route::get('/',function()
{
return 'Hello World';
});
Route::get('/',function()
{
return [1,2,3];
});
Response类
返回一个完整的response实例允许自定义响应的HTTP状态码和头信息,Response实例继承自Symfony\Component\HttpFoundation\Response
基类,该类提供了一系列方法用于创建HTTP响应
添加响应头
header
方法添加一系列响应头,也可以通过withHeaders
方法指定头信息组添加到响应
return response($content)
->header('Content-Type',$type)
->header('X-Header-One','Header Value')
->header('X-Header-Two','Header Value');
//使用数组形式
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
添加Cookie到响应
cookie
方法生成Cookie并添加到响应实例
return response->cookie(‘name’,’value’,$minutes);
还可以使用Cookie
门面,queue
方法接受cookie实例或创建的必要参数,这些Cookie会在响应被发送到浏览器之前添加到响应
Cookie::queue(‘author’,’value’,’minutes’);
Cookie加密
默认情况下,Laravel框架生成的Cookie都经过了加密的签名,以免在客户端被篡改。可以通过app\Http\Middleware\EnctryptCookies
提供的$except
属性取消特定的Cookie加密
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//’cookie_name',
];
}
重定向
重定向响应是Illuminate\Http\RedirectResponse
类的实例,包含了必要的头信息将用户重定向到另一个URL
使用辅助函数
redirect
函数可以重定向到指定的地址
Route::get('login',function()
{
return redirect('home');
});
back
函数返回到前一个URL
Route::post('user/profile',function()
{
//返回上一个页面并自动在表单中填入已填信息
return back()->withInput();
});
重定向到命名路由
如果调用不带参数的redirect
方法,会返回一个Illuminate\Routing\Redirector
实例,然后可以使用Redirector
实例上的所有方法,route
方法可以重定向到指定的路由,如果路由有参数,可以将其作为第二个参数传递到route
方法
return redirect()->route(‘login’,[‘id’=>1]);
重定向到控制器动作
action
方法可以生成控制器指定动作的URL,如果控制器有参数,可以将其作为第二个参数传递给action
方法
return redirect()->action(‘UserController@profile’,[‘id’=>1]);
重定向到外部域名
away
方法可以重定向到指定的网址
return redirect()->away(‘http://xiao-ming9.github.io');
视图响应
view
方法能够返回视图,也可以使用全局辅助函数view
return response()
->view('hello',$data,200);
->header('Content->Type',$type);
//全局辅助函数
Route::get('/view/response',function(){
return view('hello');
});
JSON响应
json
方法会自动将Content-Type头设置为application/json
,并使用PHP函数将给定数组转化为JSON格式数据:
return response()->json([
'name'=>'Abigail',
'state'=>'CA'
]);
如果想要创建一个JSONP响应,可以在json
方法之后调用withCallback
方法
return response()
->json(['name'=>'Abigail','state' =>'CA'])
->withCallback($request->input('callback'));
也可以直接使用jsonp
方法:
return response()
->jsonp($request->input('callback'),
['name'=>'Abigail','state'=>'CA']);
文件下载
download
方法用于生成用户浏览器下载给定路径文件的响应,第一参数为文件,可以使用相对路径(相对于public中的index.php)或绝对路径,第二第三参数可选,第二个参数为自定义文件名,第三个参数为HTTP头信息
return response()->download($pathFile);
return response()->download($pathFile,$name,$headers);
文件响应
file
方法可用于直接在用户浏览器显示文件,,接受文件路径作为第一个参数,头信息作为第二个参数
return response()->file($pathToFile);
return response()->file($pathToFile,$headers);