要通过依赖注入的方式来获取当前 HTTP 请求的实例,你应该在控制器方法中类型提示 Illuminate\Http\Request
依赖注入 & 路由参数
如果控制器方法要从路由参数中获取数据,则应在其他依赖项之后列出路由参数。例如,如果你的路由是这样定义的:
如下所示使用类型提示 Illuminate\Http\Request
,就可以通过定义控制器方法获取路由参数 id
:
获取请求路径
path
方法返回请求的路径信息。也就是说,如果传入的请求的目标地址是 http://cms2.cnfol.com/user/123456,那么 path
将会返回 user/123456:
获取请求的 URL
你可以使用 url
或 fullUrl
方法去获取传入请求的完整 URL。url
方法返回不带有查询字符串的 URL,而 fullUrl
方法的返回值包含查询字符串:
http://cms2.cnfol.com/user/123456
代码如下:
获取请求方法
对于传入的请求 method
方法将返回 HTTP 的请求方式。你也可以使用 isMethod
方法去验证 HTTP 的请求方式与指定规则是否相配:
返回的结果
获取所有输入数据
你可以使用 all
方法以 数组
形式获取到所有输入数据:
$request->all();
获取指定输入值
使用几种简单的方法(不需要特别指定哪个 HTTP 动作),就可以访问 Illuminate\Http\Request
实例中所有的用户输入。也就是说无论是什么样的 HTTP 动作,input
方法都可以被用来获取用户输入数据:
$name=$request->input('name');
你可以给 input
方法的第二个参数传入一个默认值。如果请求的输入值不存在请求上,就返回默认值:
$name = $request->input('name', 'lisus2000');
从查询字符串获取输入
使用 input
方法可以从整个请求中获取输入数据(包括查询字符串),而 query
方法可以只从查询字符串中获取输入数据:
获取部分输入数据
如果你需要获取输入数据的子集,则可以用 only
和 except
方法。这两个方法都接收 数组
或动态列表作为参数:
Cookies
从请求中获取 Cookie
Laravel 框架创建的每个 cookie 都会被加密并使用验证码进行签名,这意味着如果客户端更改了它们,便视为无效。若要从请求中获取 cookie 值,你可以在 Illuminate\Http\Request
实例上使用 cookie
方法:
$value = $request->cookie('name');
将 Cookies 附加到响应
你可以使用 cookie
方法将 cookie 附加到传出的 Illuminate\Http\Response
实例。你需要传递 Cookie 名称、值、以及有效期(分钟)到这个方法:
return response('Hello World')->cookie( 'name', 'value', $minutes
));
文件
获取上传文件
你可以使用 file
方法或使用动态属性从 Illuminate\Http\Request
实例中访问上传的文件。该 file
方法返回一个 Illuminate\Http\UploadedFile
类的实例,该类继承了PHP 的 SplFileInfo
类的同时也提供了各种与文件交互的方法:
$file = $request->file('photo'); $file = $request->photo;
你可以使用 hasFile
方法确认请求中是否存在文件:
if ($request->hasFile('photo')) { // }
验证成功上传
除了检查上传的文件是否存在外,你也可以通过 isValid
方法验证上传的文件是否有效:
if ($request->file('photo')->isValid()) { // }
文件路径 & 扩展名
UploadedFile
类还包含访问文件的完整路径及其扩展名方法。extension
方法会根据文件内容判断文件的扩展名。该扩展名可能会和客户端提供的扩展名不同:
$path = $request->photo->path(); $extension = $request->photo->extension();