laravel-response
响应:是Illuminate\Http\Response这个类的一个实例。Illuminate\Http\Response这个类继承自Symfony\Component\HttpFoundation\Response.
重定向响应:是Illuminate\Http\RedirectResponse类的实例。
Illuminate\Http\Response使用了ResponseTrait。该trait提供了:
- header --> return response($content,$status)->header('Content-Type',$value);
- withCookie --> return response($content,$status)->header('Content-Type',$value)->withCookie('varname','value');
- content
- status
----------------------------------------------------------------------------------------------------
--------------------
- 响应的生成方式{新建响应实例|全局帮助函数response($content,$status)|响应的工厂response(无参)},
- 为响应加点料{cookie}
- 重定向响应生成方式,
---------------------
----------------------------------------------------------------------------------------------------
1.响应的生成方式{新建类实例|使用全局的帮助函数生成(推荐)|响应的工厂response(无参)}
--新建类实例:
use Illuminate\Http\Response;
Route::get('testResponse',function(){
$content = 'Hello LaravelAcademy!';
$status = 200;
$value = 'text/html;charset=utf-8';
return (new Response($content,$status))->header('Content-Type',$value);
});
--全局帮助函数:response($content,$status);此函数定义在:vender/laravel/framework/illuminate/Foundation/helpers.php
Route::get('testResponse',function(){
$content = 'Hello LaravelAcademy!';
$status = 500;
$value = 'text/html;charset=utf-8';
return response($content,$status)->header('Content-Type',$value);
});
--响应的工厂:
Illuminate\Contracts\Routing\ResponseFactory ->这是个契约(接口)
Illuminate\Routing\ResponseFactory ->他实现了上面的接口
如果repsonse() 没有被提供参数他就会返回Illuminate\Routing\ResponseFactory ,而它提供了丰富的响应类型
此工厂可以返回的类型有:
- 视图响应
-
Route::get('testResponseView',function(){ $value = 'text/html;charset=utf-8';//下面的view是response的方法 return response()->view('hello',['message'=>'今天我在郑州,还没吃早饭']) ->header('Content-Type',$value); }); -
Route::get('testResponseView',function(){ //下面的view是全局帮助函数 return view('hello',['message'=>'下午了'])); });
-
- JSON/JSONP响应
-
Route::get('testResponseJson',function(){ //json响应,auto set header return response()->json(['name'=>'root','passwd'=>'123123']); }); -
Route::get('testResponseJson',function(){ //jsonp响应 return response()->json(['name'=>'root','passwd'=>'123123']) ->setCallback(request()->input('callback')); });
-
- 文件下载响应
-
Route::get('testResponseDownload',function(){ return response()->download( realpath(base_path('public/docs')).'/ktbg.doc', '开题报告.doc' ); });
-
-------------------------------------------------------------------------------------------------------
2.为响应加点料:cookie
Route::get('testResponseCookie',function(){
$content = 'hello';
$status = 200;
$value = 'text/html;charset=utf-8';
return response($content,$status)->header('Content-Type',$value)->withCookie('hello','how are you');
});
备注:响应可以在浏览器的开发模式下查看,在此框架中cookie默认加密,可在app/Http/Middleware/EncryptCookies.php中配置哪些不需要加密,填写对应的名称即可,比如上面的'hello'
----------------------------------------------------------------------------------------------------------
3.重定向响应生成方式
--响应的实例是Illuminate\Http\RedirectResponse类的实例
--全局帮助函数redirect();
如果redirect有参数则调用Illuminate\Routing\Redirector类的to方法
如果redirect没参数则返回Redirector对象实例
-----
3.1基本重定向
return redirect('home'); //重定向到home页
return back()->withInput();//重定向到前一个页
3.2 重定向到命名路由
return redirect()->route('被命名的路由的名称' [,canshu]);
3.3 重定向到控制器动作
return redirect()->action('PostController@show',[1]);
3.4 带一次性Session数据的重定向
return redirect('xpage')->with('status', 'something changed!');
浙公网安备 33010602011771号