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);