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

 

#基本响应

从路由返回字串

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

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

建立自定义响应

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

use Illuminate\Http\Response;

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, 你可以使用App\Http\Middleware\EncryptCookies中间件的$except 属性

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

#其他响应类型

使用辅助方法 response 可以轻松的产生其他类型的响应实例。当你调用辅助方法 response 且不带任何参数时,将会返回 Illuminate\Contracts\Routing\ResponseFactory 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.

 

 

#重定向

 

重定向响应通常是类 Illuminate\Http\RedirectResponse 的实例,并且包含用户要重定向至另一个 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 且不带任何参数时,将会返回 Illuminate\Routing\Redirector 的实例,你可以对该实例调用任何的方法。举个例子,要产生一个 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('App\Http\Controllers\HomeController@index');

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

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

 

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

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

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

return redirect()->action('App\Http\Controllers\UserController@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!');
});

 

Laravel5.1学习笔记6 响应的更多相关文章

  1. 【学习笔记】响应式布局的常用解决方案(媒体查询、百分比、rem、和vw/vh)

    原文转载:https://blog.csdn.net/sinat_17775997/article/details/81020417 一.媒体查询 不同物理分辨率的设备,在还原设计稿时,css中设置的 ...

  2. Laravel5.1学习笔记19 EloquentORM 入门

    Eloquent:入门 简介 定义模型(model) Eloquent 模型规范 取出多个模型 取出单个模型 / 集合 取出集合 插入更新模型  基本插入 基本更新 大批量赋值 删除模型 软删除 查询 ...

  3. Laravel5.1学习笔记18 数据库4 数据填充

    简介 编写数据填充类 使用模型工厂类 调用额外填充类 执行填充 #简介 Laravel includes a simple method of seeding your database with t ...

  4. Laravel5.1学习笔记9 系统架构1 请求生命周期 (待修)

    Request Lifecycle Introduction Lifecycle Overview Focus On Service Providers Introduction When using ...

  5. Laravel5.1学习笔记5 请求

    HTTP 请求 #取得请求实例 #基本的请求信息 #PSR-7 请求 #取出输入数据 #旧的输入 #Cookies #文件 #取得请求实例(此部分文档5.1完全重写,注意) 要通过依赖注入获取当前HT ...

  6. Laravel5.1学习笔记4 控制器

    HTTP 控制器 简介 基础控制器 控制器中间件 RESTful 资源控制器 隐式控制器 依赖注入和控制器 路由缓存 简介 除了在单一的 routes.php 文件中定义所有的请求处理逻辑之外,你可能 ...

  7. Laravel5.1学习笔记3 HTTP中间件

    HTTP 中间件 简介 建立中间件 注册中间件 可终止中间件 简介 HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求,例如,Laravel 默认包含了一个中间件来检验用户身份验证 ...

  8. Laravel5.1 学习笔记2, 路由

    安装的说明请看文档, laravel 安装 #基本路由 你将在 app/Http/routes.php 文件定义大部分路由, 这些路由将被App\Providers\RouteServiceProvi ...

  9. Laravel5.5学习笔记

    安装composer 下载安装脚本 php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php ...

随机推荐

  1. 5.2.2 re模块方法与正则表达式对象

    Python标准库re提供了正则表达式操作所需要的功能,既可以直接使用re模块中的方法,来实现,也可以把模式编译成正则表达式对象再使用. 方法 功能说明 complie(pattern[,flagss ...

  2. 手机访问pc版网站自动跳转为手机版页面

    1.PC版首页</head>标签前加上以下脚本 <script src="/tools/browser_redirect.ashx"></script ...

  3. 清北学堂模拟赛d2t4 最大值(max)

    题目描述LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目:这里有一个长度为n的正整数数列ai(下标为1~n).并且有一个参数k.你需要找两个正整数x,y,使得x+k<=y, ...

  4. nyoj_18_The Triangle_201312071533

    The Triangle 时间限制:1000 ms  |           内存限制:65535 KB 难度:4   描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure ...

  5. thymeleaf模板引擎基础使用(转)

    刚好项目上用到这个模板引擎,记录以下基础用法. thymeleaf介绍 简单说, Thymeleaf是一个跟Velocity.FreeMarker类似的模板引擎,它可以完全替代JSP .相比其他的模板 ...

  6. Android平台Airplay的实现方法

    Airplay属于局域网内异构设备之间分享多媒体数据的一种通信协议.Airplay设备有客户端和服务器之分,一般将小屏IOS设备实现为Airplay客户端,大屏幕设备实现为Airplay服务器.即iP ...

  7. spring 计时器

    spring 计时器 可以这样: http://blog.csdn.net/u010648555/article/details/52162840 也可以使用annotation <!-- 设置 ...

  8. tiny4412移植opencv2.4.7手记

    在买了新的4412板子后.打算趁着刚成功在6410上移植过的经验,速度解决下.不想出现了各种问题.小结下: 1.关于opencv的移植: tiny4412的linux3.5上,须要把opencv的li ...

  9. redis client 2.0.0 pipeline 的list的rpop bug

    描写叙述: redis client 2.0.0 pipeline 的list的rpop 存在严重bug,rpop list的时候,假设list已经为空的时候,rpop出来的Response依旧不为n ...

  10. 2014.8.12-AKKA和Actor model 分布式开发环境学习小结

    学习使用AKKA 断断续续有一年了. 眼下还是习惯用java来写akka以下的程序.对于原生的scala还是没有时间和兴趣去学习它. 毕竟学习一门语言须要兴趣和时间的. AKKA学习资源还是不算丰富. ...