Laravel5.1学习笔记6 响应
- 基本响应
- 附加头信息到响应
- 附加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);
建立 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');
// For a route with the following URI: profile/{id}
return redirect()->route('profile', [1]);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 响应的更多相关文章
- 【学习笔记】响应式布局的常用解决方案(媒体查询、百分比、rem、和vw/vh)
原文转载:https://blog.csdn.net/sinat_17775997/article/details/81020417 一.媒体查询 不同物理分辨率的设备,在还原设计稿时,css中设置的 ...
- Laravel5.1学习笔记19 EloquentORM 入门
Eloquent:入门 简介 定义模型(model) Eloquent 模型规范 取出多个模型 取出单个模型 / 集合 取出集合 插入更新模型 基本插入 基本更新 大批量赋值 删除模型 软删除 查询 ...
- Laravel5.1学习笔记18 数据库4 数据填充
简介 编写数据填充类 使用模型工厂类 调用额外填充类 执行填充 #简介 Laravel includes a simple method of seeding your database with t ...
- Laravel5.1学习笔记9 系统架构1 请求生命周期 (待修)
Request Lifecycle Introduction Lifecycle Overview Focus On Service Providers Introduction When using ...
- Laravel5.1学习笔记5 请求
HTTP 请求 #取得请求实例 #基本的请求信息 #PSR-7 请求 #取出输入数据 #旧的输入 #Cookies #文件 #取得请求实例(此部分文档5.1完全重写,注意) 要通过依赖注入获取当前HT ...
- Laravel5.1学习笔记4 控制器
HTTP 控制器 简介 基础控制器 控制器中间件 RESTful 资源控制器 隐式控制器 依赖注入和控制器 路由缓存 简介 除了在单一的 routes.php 文件中定义所有的请求处理逻辑之外,你可能 ...
- Laravel5.1学习笔记3 HTTP中间件
HTTP 中间件 简介 建立中间件 注册中间件 可终止中间件 简介 HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求,例如,Laravel 默认包含了一个中间件来检验用户身份验证 ...
- Laravel5.1 学习笔记2, 路由
安装的说明请看文档, laravel 安装 #基本路由 你将在 app/Http/routes.php 文件定义大部分路由, 这些路由将被App\Providers\RouteServiceProvi ...
- Laravel5.5学习笔记
安装composer 下载安装脚本 php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php ...
随机推荐
- 30.IK中文分词器的安装和简单使用
在之前我们学的都是英文,用的也是英文的standard分词器.从这一节开始,学习中文分词器.中国人基本上都是中文应用,很少是英文的,而standard分词器是没有办法对中文进行合理分词的,只是将每个中 ...
- 一次vue-cli 2.x项目打包优化经历(优化xlsx插件)
一.分析各模块打包后大小 用vue-cli创建的项目,已经集成 webpack-bundle-analyzer.详见文件 build/webpack.prod.conf.js,代码如下: if (co ...
- hdu 5171 GTY's birthday gift
GTY's birthday gift 问题描述 GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次 ...
- 清北学堂模拟赛d1t6 或和异或(xor)
题目描述 LYK最近在研究位运算,它研究的主要有两个:or和xor.(C语言中对于|和^) 为了更好的了解这两个运算符,LYK找来了一个2^n长度的数组.它第一次先对所有相邻两个数执行or操作,得到一 ...
- LightOJ 1370 Bi-shoe and Phi-shoe
/* LightOJ 1370 Bi-shoe and Phi-shoe http://lightoj.com/login_main.php?url=volume_showproblem.php?pr ...
- [tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]
这样的题解只能舔题解了,,,qaq 清橙资料里有.. #include <iostream> #include <cstdio> #include <cstdlib> ...
- static_cast、dynamic_cast reinterpret_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的<C++ 的设计和演化>.最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_ ...
- cogs 1310. [HAOI2006]聪明的猴子
1310. [HAOI2006]聪明的猴子 ★ 输入文件:monkey.in 输出文件:monkey.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 在一个热带 ...
- Java学习笔记之 IO包 字节流
IO包最重要的五个类和一个接口 File/OutputStream/InputStream(字节流)/Writer/Reader(字符流) 一个接口:Serializable File类: 字节流 ...
- C++成员函数实现在类定义中与在类定义外的区别(Windows下直接使用g++)
c++ 类的成员函数放在类的外面来实现的写法,探究一下. 原文: http://www.cnblogs.com/findumars/p/6143375.html ------------------- ...