访问请求

要通过依赖项注入获取当前HTTP请求的实例,您应该在控制器的构造函数或方法上键入该类的提示。当前请求实例将由服务容器自动注入:Illuminate\Http\Request

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class UserController extends Controller
  5. {
  6. /**
  7. * Store a new user.
  8. *
  9. * @param Request $request
  10. * @return Response
  11. */
  12. public function store(Request $request)
  13. {
  14. $name = $request->input('name');
  15. //
  16. }
  17. }

如果您的控制器方法也希望从route参数输入,只需在其他依赖项之后列出您的route参数即可。例如,如果您的路线是这样定义的:

  1. $router->put('user/{id}', 'UserController@update');

您仍然可以通过如下所示定义控制器方法来键入提示并访问route参数:Illuminate\Http\Request``id

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class UserController extends Controller
  5. {
  6. /**
  7. * Update the specified user.
  8. *
  9. * @param Request $request
  10. * @param string $id
  11. * @return Response
  12. */
  13. public function update(Request $request, $id)
  14. {
  15. //
  16. }
  17. }

基本要求信息

该实例提供了多种方法来检查您的应用程序的HTTP请求并扩展该类。这是该类中可用的更多有用方法:Illuminate\Http\Request``Symfony\Component\HttpFoundation\Request

检索请求URI

path方法返回请求的URI。因此,如果传入请求的目标是,则该方法将返回:http://domain.com/foo/bar``path``foo/bar

  1. $uri = $request->path();

is方法使您可以验证传入的请求URI是否与给定的模式匹配。*使用此方法时,可以将字符用作通配符:

  1. if ($request->is('admin/*')) {
  2. //
  3. }

要获取完整的URL,而不仅仅是路径信息,可以在请求实例上使用urlor fullUrl方法:

  1. // Without Query String...
  2. $url = $request->url();
  3. // With Query String...
  4. $url = $request->fullUrl();

检索请求方法

method方法将返回请求的HTTP动词。您还可以使用该isMethod方法来验证HTTP动词是否与给定的字符串匹配:

  1. $method = $request->method();
  2. if ($request->isMethod('post')) {
  3. //
  4. }

PSR-7请求

PSR-7标准指定HTTP消息的接口,包括请求和响应。如果要获取PSR-7请求的实例,则首先需要安装一些库。Laravel使用Symfony HTTP消息桥组件将典型的Laravel请求和响应转换为PSR-7兼容的实现:

  1. composer require symfony/psr-http-message-bridge
  2. composer require zendframework/zend-diactoros

一旦安装了这些库,就可以通过简单地在路由或控制器上键入请求类型的提示来获得PSR-7请求:

  1. use Psr\Http\Message\ServerRequestInterface;
  2. $router->get('/', function (ServerRequestInterface $request) {
  3. //
  4. });

如果从路由或控制器返回PSR-7响应实例,它将自动转换回Laravel响应实例并由框架显示。

检索输入

检索输入值

使用一些简单的方法,您可以访问实例中的所有用户输入。您无需担心用于请求的HTTP动词,因为所有动词的输入方式都是相同的:Illuminate\Http\Request

  1. $name = $request->input('name');

您可以将默认值作为方法的第二个参数传递input。如果请求中没有请求的输入值,则将返回此值:

  1. $name = $request->input('name', 'Sally');

使用带有数组输入的表单时,可以使用“点”符号来访问数组:

  1. $name = $request->input('products.0.name');
  2. $names = $request->input('products.*.name');

确定是否存在输入值

您应该使用该has方法来确定请求中是否存在值。如果请求中存在该值,则该has方法返回true

  1. if ($request->has('name')) {
  2. //
  3. }

当给定一个数组时,该has方法将确定是否存在所有指定的值:

  1. if ($request->has(['name', 'email'])) {
  2. //
  3. }

如果要确定请求中是否存在一个值并且该值不为空,则可以使用以下filled方法:

  1. if ($request->filled('name')) {
  2. //
  3. }

检索所有输入数据

您也可以array使用all方法检索所有输入数据:

  1. $input = $request->all();

检索输入数据的一部分

如果需要检索输入数据的子集,则可以使用onlyexcept方法。这两种方法都将接受单个array或动态参数列表:

  1. $input = $request->only(['username', 'password']);
  2. $input = $request->only('username', 'password');
  3. $input = $request->except(['credit_card']);
  4. $input = $request->except('credit_card');

档案

检索上传的文件

您可以使用方法访问实例随附的上载文件。该方法返回的对象是该类的实例,该类扩展了PHP 类并提供了多种与文件进行交互的方法:Illuminate\Http\Request``file``file``Symfony\Component\HttpFoundation\File\UploadedFile``SplFileInfo

  1. $file = $request->file('photo');

您可以使用以下hasFile方法确定请求中是否存在文件:

  1. if ($request->hasFile('photo')) {
  2. //
  3. }

验证成功上传

除了检查文件是否存在之外,您还可以验证通过以下isValid方法上传文件没有问题:

  1. if ($request->file('photo')->isValid()) {
  2. //
  3. }

移动上传的文件

要将上载的文件移动到新位置,应使用该move方法。此方法会将文件从其临时上传位置(由您的PHP配置确定)移动到您选择的更永久的目标位置:

  1. $request->file('photo')->move($destinationPath);
  2. $request->file('photo')->move($destinationPath, $fileName);

其他文件方法

UploadedFile实例上还有多种其他方法可用。请查阅该类API文档,以获取有关这些方法的更多信息。