访问请求
要通过依赖项注入获取当前HTTP请求的实例,您应该在控制器的构造函数或方法上键入该类的提示。当前请求实例将由服务容器自动注入:Illuminate\Http\Request
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
如果您的控制器方法也希望从route参数输入,只需在其他依赖项之后列出您的route参数即可。例如,如果您的路线是这样定义的:
$router->put('user/{id}', 'UserController@update');
您仍然可以通过如下所示定义控制器方法来键入提示并访问route参数:Illuminate\Http\Request``id
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Update the specified user.
*
* @param Request $request
* @param string $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
}
基本要求信息
该实例提供了多种方法来检查您的应用程序的HTTP请求并扩展该类。这是该类中可用的更多有用方法:Illuminate\Http\Request``Symfony\Component\HttpFoundation\Request
检索请求URI
该path
方法返回请求的URI。因此,如果传入请求的目标是,则该方法将返回:http://domain.com/foo/bar``path``foo/bar
$uri = $request->path();
该is
方法使您可以验证传入的请求URI是否与给定的模式匹配。*
使用此方法时,可以将字符用作通配符:
if ($request->is('admin/*')) {
//
}
要获取完整的URL,而不仅仅是路径信息,可以在请求实例上使用url
or fullUrl
方法:
// Without Query String...
$url = $request->url();
// With Query String...
$url = $request->fullUrl();
检索请求方法
该method
方法将返回请求的HTTP动词。您还可以使用该isMethod
方法来验证HTTP动词是否与给定的字符串匹配:
$method = $request->method();
if ($request->isMethod('post')) {
//
}
PSR-7请求
PSR-7标准指定HTTP消息的接口,包括请求和响应。如果要获取PSR-7请求的实例,则首先需要安装一些库。Laravel使用Symfony HTTP消息桥组件将典型的Laravel请求和响应转换为PSR-7兼容的实现:
composer require symfony/psr-http-message-bridge
composer require zendframework/zend-diactoros
一旦安装了这些库,就可以通过简单地在路由或控制器上键入请求类型的提示来获得PSR-7请求:
use Psr\Http\Message\ServerRequestInterface;
$router->get('/', function (ServerRequestInterface $request) {
//
});
如果从路由或控制器返回PSR-7响应实例,它将自动转换回Laravel响应实例并由框架显示。
检索输入
检索输入值
使用一些简单的方法,您可以访问实例中的所有用户输入。您无需担心用于请求的HTTP动词,因为所有动词的输入方式都是相同的:Illuminate\Http\Request
$name = $request->input('name');
您可以将默认值作为方法的第二个参数传递input
。如果请求中没有请求的输入值,则将返回此值:
$name = $request->input('name', 'Sally');
使用带有数组输入的表单时,可以使用“点”符号来访问数组:
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
确定是否存在输入值
您应该使用该has
方法来确定请求中是否存在值。如果请求中存在该值,则该has
方法返回true
:
if ($request->has('name')) {
//
}
当给定一个数组时,该has
方法将确定是否存在所有指定的值:
if ($request->has(['name', 'email'])) {
//
}
如果要确定请求中是否存在一个值并且该值不为空,则可以使用以下filled
方法:
if ($request->filled('name')) {
//
}
检索所有输入数据
您也可以array
使用all
方法检索所有输入数据:
$input = $request->all();
检索输入数据的一部分
如果需要检索输入数据的子集,则可以使用only
和except
方法。这两种方法都将接受单个array
或动态参数列表:
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
档案
检索上传的文件
您可以使用方法访问实例随附的上载文件。该方法返回的对象是该类的实例,该类扩展了PHP 类并提供了多种与文件进行交互的方法:Illuminate\Http\Request``file``file``Symfony\Component\HttpFoundation\File\UploadedFile``SplFileInfo
$file = $request->file('photo');
您可以使用以下hasFile
方法确定请求中是否存在文件:
if ($request->hasFile('photo')) {
//
}
验证成功上传
除了检查文件是否存在之外,您还可以验证通过以下isValid
方法上传文件没有问题:
if ($request->file('photo')->isValid()) {
//
}
移动上传的文件
要将上载的文件移动到新位置,应使用该move
方法。此方法会将文件从其临时上传位置(由您的PHP配置确定)移动到您选择的更永久的目标位置:
$request->file('photo')->move($destinationPath);
$request->file('photo')->move($destinationPath, $fileName);