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

---------------------------------------------------------------------------------------------------- 

 

--------------------

  1. 响应的生成方式{新建响应实例|全局帮助函数response($content,$status)|响应的工厂response(无参)},
  2. 为响应加点料{cookie}
  3. 重定向响应生成方式,

---------------------

 

---------------------------------------------------------------------------------------------------- 

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

posted on 2017-03-10 14:08  blbl9527  阅读(253)  评论(1)    收藏  举报

导航


github sina微博 FB