获取请求数据
Illuminate\Http\Request
继承自
Symfony\Component\HttpFoundation\Request 类
依赖注入方式
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* 存储新用户
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
控制器方法中获取路由参数
Route::put('user/{id}','UserController@update');
...
use Illuminate\Http\Request;
public function update(Request $request, $id)
{
//
}
路由闭包访问请求,在执行闭包函数的时候服务器会自动注入请求
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
//
});
请求路径/方法
获取请求路径
$path = $request->path();
# 请求url http://domain.com/user/1 , path() 返回 user/1
验证请求路径是否与给定模式匹配
if($request->is('user/*')){
//
}
# 如果请求URL是 http://domain.com/user/1,该方法会返回 true
获取请求url
// 不包含查询字符串
$url = $request->url();
// 包含查询字符串
$url_with_query = $request->fullUrl();
获取请求方法
$method = $request->method(); // GET/POST
验证HTTP请求方式
if($request->isMethod('post')){
// true or false
}
PSR-7请求
链接
请求字符串处理
默认情况下,Laravel 在 App\Http\Kernel 的全局中间件堆栈中引入了 TrimStrings 和
ConvertEmptyStringsToNull 中间件
protected $middleware = [
// 将字符串两端的空格清除
\App\Http\Middleware\TrimStrings::class,
// 将空字符串转化为 null
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class
];
获取请求输入
// 获取所有输入值
$input = $request->all();
// 获取单个输入值(获取所有HTTP请求参数值)
$name = $request->input('name', 'default_value');
// 处理表单数组,用 . 访问数组输入
// 请求url http://blog.dev/user/1?products[][name]=aa&products[][name]=bb
$input = $request->input('products.0.name');
# aa
$names = $request->input('products.*.name');
# ['aa', 'bb']
// 获取GET请求查询字符串参数值
$name = $request->query('name', 'aa');
// 关联数组方式获取整个查询字符串的值,类似all()
$query = $request->query();
// 获取POST请求参数值 ???
$query = $request->post();
// 通过动态属性获取输入,获取表单的name字段
$name = $request->name;
// 获取json输入值(content-type请求头为application/json), "."解析数组
$name = $request->input('user.name');
// 只获取输入的部分数据
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
// 获取非指定输入的数据
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
// 判断请求参数是否存在
if ($request->has('name')) {
// true
}
// 判断请求参数是否存在(数组形式,只有参数都存在才为true)
if ($request->has(['name', 'email'])) {
//
}
// 判断参数存在且值不为空
if ($request->filled('name')) {
//
}
input / query 区别
input :
- 获取所有 HTTP 请求参数值
- 从 query + request 属性对象中获取参数值
query:
- 获取 GET 请求查询字符串参数值
- 从 query 属性对象中获取参数值
post:
- 从 request 属性对象中获取参数值
上一次请求输入
Laravel 允许你在两次请求之间保存上一次输入数据,这个特性在检测校验数据失败后需要重新填充表单数据时很有用,
不过如果你使用的是 Laravel 自带的验功能,则不需要手动使用这些方法,因为一些 Laravel 自带的校验设置会自动调用它们。
cookie
// 从请求中取出Cookie
$value = $request->cookie('name');
// 添加Cookie到响应(Illuminate\Http\Response)
return response('欢迎来到 Laravel 学院')->cookie(
'cookie_name', 'cookie_value', $valid_minutes
);
// 生成cookie实例(全局辅助函数 cookie,该 Cookie 只有在添加到响应实例上才会发送到客户端)
$cookie = cookie('name', 'value', $minutes);
return response('welcome to this')->cookie($cookie);
文件上传
配置信任代理
使用场景 / 怎么使用 ??
protected $middleware = [
// 允许快速自定义需要被应用信任的负载均衡器或代理
\App\Http\Middleware\TrustProxies::class,
];
如果你的应用运行在一个会中断 TLS/SSL 证书的负载均衡器之后,你会注意到有的时候应用不会生成 HTTPS
链接,
通常这是因为应用是从负载均衡器从80端口转发过来的流量,所以不知道应该生成安全加密链接。
要解决这个问题可以使用 Laravel5.5 新增的 App\Http\Middleware\TrustProxies 中间件,该中间件允许你快速自定义需要被应用信任的负载均衡器或代理。
被信任的代理位于这个中间件的 $proxies属性列表,除了配置信任代理之外,还可以配置代理发送的带有请求来源信息的消息头:
信任所有代理
protected $proxies = '**';