zoukankan      html  css  js  c++  java
  • Laravel5.1学习笔记6 响应

    • 基本响应
      • 附加头信息到响应
      • 附加Cookie到响应
    • 其他响应
      • View视图响应
      • JSON响应
      • File下载
    • 重定向
      • 重定向到命名路由
      • 重定向到控制器Action
      • 附带闪回Session数据重定向
    • 响应宏

    #基本响应

    从路由返回字串

    最基本的响应就是从 Laravel 的路由返回字串:

    Route::get('/', function()
    {
    return 'Hello World';
    });

    建立自定义响应

    但是以大部分的路由及控制器所执行的动作来说,你需要返回完整的 IlluminateHttpResponse 实例或是一个视图。返回一个完整的 Response 实例时,你能够自定义响应的 HTTP 状态码以及响应头。Response 实例继承了 SymfonyComponentHttpFoundationResponse 类,它提供了很多方法来建立 HTTP 响应。

    use IlluminateHttpResponse;

    Route::get('home', function () {
    return (new Response($content, $status))
    ->header('Content-Type', $value);
    });


    为了方便起见,你可以使用辅助方法 response

    Route::get('home', function () {
    return response($content, $status)
    ->header('Content-Type', $value);
    });

    提示: 有关 Response 方法的完整列表可以参照 API 文档 以及 Symfony API 文档.

    #附加头信息到响应

    要记住多数响应方法是链式调用的, 用以建立流畅的响应。如下:

    return response($content)
    ->header('Content-Type', $type)
    ->header('X-Header-One', 'Header Value')
    ->header('X-Header-Two', 'Header Value');

    #附加Cookie到响应 (这里省去不少废话,直接看代码理解,也不明白鬼佬的文档这么多废话)

    return response($content)->header('Content-Type', $type)
    ->withCookie('name', 'value');

    withCookie 方法接受更多的可选引数,使你能够定制化Cookie的属性

    ->withCookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)

    默认所有cookies 都被Laravel加密和签名,这样它们不能被客户随意改变, 如果你不想加密某些Cookies, 你可以使用AppHttpMiddlewareEncryptCookies中间件的$except 属性

    /**
    * The names of the cookies that should not be encrypted.
    *
    * @var array
    */
    protected $except = [
    'cookie_name',
    ];

    #其他响应类型

    使用辅助方法 response 可以轻松的产生其他类型的响应实例。当你调用辅助方法 response 且不带任何参数时,将会返回 IlluminateContractsRoutingResponseFactory Contract 的实现。这个Contract 提供了一些有用的方法来产生响应。

    View响应

    如果你需要控制响应状态和响应头,但也需要返回一个view作为响应内容,你可用view方法

    return response()->view('hello', $data)->header('Content-Type', $type);
    如果不需要传送定制HTTP状态,或者定制头信息,你可以使用全局View辅助方法
     

    建立 JSON 响应

    json 方法会自动将响应头的 Content-Type 配置为 application/json, 同时转换给定的array数组到JSON,用json_encode PHP方法

    return response()->json(['name' => 'Abigail', 'state' => 'CA']);

    建立 JSONP 响应

    return response()->json(['name' => 'Abigail', 'state' => 'CA'])
    ->setCallback($request->input('callback'));

    建立文件下载的响应

    第一个参数是给定的下载目录,第二个是保存的文件名, 第三个是HTTP头信息

    return response()->download($pathToFile);

    return response()->download($pathToFile, $name, $headers);

    return response()->download($pathToFile)->deleteFileAfterSend(true);

    Note: Symfony HttpFoundation, which manages file downloads, requires the file being downloaded to have an ASCII file name.

     

     

    #重定向

     

    重定向响应通常是类 IlluminateHttpRedirectResponse 的实例,并且包含用户要重定向至另一个 URL 所需的响应头。有很多种方法来产生重定向RedirectResponse实例, 最简单的方法是使用全局redirect辅助方法

    Route::get('dashboard', function () {
    return redirect('home/dashboard');
    });
    有时候,你希望把用户重定向到它之前的位置, 比如表单提交失败,你可以用全局 back 辅助方法
    Route::post('user/profile', function () {
    // Validate the request...

    return back()->withInput();
    });

    返回重定向

    有几种方法可以产生 RedirectResponse 的实例,最简单的方式就是透过辅助方法 redirect。当在测试时,建立一个模拟重定向响应的测试并不常见,所以使用辅助方法通常是可行的:

    return redirect('user/login');

    返回根据路由名称的重定向

    当你调用辅助方法 redirect 且不带任何参数时,将会返回 IlluminateRoutingRedirector 的实例,你可以对该实例调用任何的方法。举个例子,要产生一个 RedirectResponse 到一个路由名称,你可以使用 route 方法:

    return redirect()->route('login');
     
    若你的路由有参数, 可以将其作为第二个引数传给route 方法
    // For a route with the following URI: profile/{id}

    return redirect()->route('profile', [1]);
     
    如果你要重定向到一个其ID参数是包含在一个Eloquent 模型中的路由, 你可以传递Model本身,其ID会自动抽出。
    return redirect()->route('profile', [$user]);


    返回根据控制器动作的重定向

    既然可以产生 RedirectResponse 的实例并重定向至路由名称,同样的也可以重定向至控制器动作

    return redirect()->action('AppHttpControllersHomeController@index');
    

    提示: 如果你已经通过 URL::setRootControllerNamespace 注册了根控制器的命名空间,那么就不需要对action() 方法内的控制器指定完整的命名空间。action() 方法内的控制器指定完整的命名空间。

    action() 方法内的控制器指定完整的命名空间。

     

    返回根据控制器动作的重定向,并给予参数赋值

    return redirect()->action('UserController@profile', [1]);

    返回根据控制器动作的重定向,并给予特定名称参数赋值

    return redirect()->action('AppHttpControllersUserController@profile', ['user' => 1]);

    返回重定向并且加上快闪数据( Flash Data )

    通常重定向至新的 URL 时会一并将数据存进一次性 Session。所以为了方便,你可以利用方法连接的方式创建一个 RedirectResponse 的实例并将数据存进一次性 Session:

    Route::post('user/profile', function () {
    // Update the user's profile...

    return redirect('dashboard')->with('status', 'Profile updated!');
    });

     

  • 相关阅读:
    20155239 2016-2017-2 《Java程序设计》第5周学习总结
    学习Java的必要知识点记录
    # 20155226 2016-2017-2 《Java程序设计》第4周学习总结
    随笔三 第三周学习
    第二周学习
    吕宇轩20155239 第一周
    随笔三 安装Linux操作系统
    随笔二
    随笔一
    java动态代理(JDK和cglib)
  • 原文地址:https://www.cnblogs.com/grkin/p/4609569.html
Copyright © 2011-2022 走看看