HTTP 请求
获取请求实例
通过 Facade
Request
facade 将为您提供对当前绑定在容器中的请求的访问。例如:
$name = Request::input('name');
请记住,如果您在命名空间中,您需要在类文件的顶部使用 use Request;
语句导入 Request
facade。
通过依赖注入
要通过依赖注入获取当前 HTTP 请求的实例,您应该在控制器构造函数或方法中类型提示该类。当前请求实例将由服务容器自动注入:
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller {
/**
* 存储新用户。
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
如果您的控制器方法还期望从路由参数中获取输入,只需在其他依赖项之后列出您的路由参数:
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller {
/**
* 更新指定用户。
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
}
检索输入
检索输入值
使用一些简单的方法,您可以从 Illuminate\Http\Request
实例中访问所有用户输入。您无需担心请求使用的 HTTP 动词,因为输入的访问方式对于所有动词都是相同的。
$name = Request::input('name');
如果输入值不存在则检索默认值
$name = Request::input('name', 'Sally');
确定输入值是否存在
if (Request::has('name'))
{
//
}
获取请求的所有输入
$input = Request::all();
仅获取请求的一些输入
$input = Request::only('username', 'password');
$input = Request::except('credit_card');
在处理带有“数组”输入的表单时,您可以使用点符号访问数组:
$input = Request::input('products.0.name');
旧输入
Laravel 还允许您在下一个请求期间保留来自一个请求的输入。例如,您可能需要在检查表单验证错误后重新填充表单。
将输入闪存到会话
flash
方法会将当前输入闪存到会话,以便在用户的下一个请求中可用:
Request::flash();
仅将某些输入闪存到会话
Request::flashOnly('username', 'email');
Request::flashExcept('password');
闪存和重定向
由于您通常希望在重定向到上一页时闪存输入,您可以轻松地将输入闪存链接到重定向。
return redirect('form')->withInput();
return redirect('form')->withInput(Request::except('password'));
检索旧数据
要从上一个请求中检索闪存输入,请在 Request
实例上使用 old
方法。
$username = Request::old('username');
如果您在 Blade 模板中显示旧输入,使用 old
辅助函数更为方便:
{{ old('username') }}
Cookies
Laravel 框架创建的所有 cookies 都经过加密并带有身份验证代码签名,这意味着如果客户端更改了它们,它们将被视为无效。
检索 Cookie 值
$value = Request::cookie('name');
将新 Cookie 附加到响应
cookie
辅助函数作为生成新的 Symfony\Component\HttpFoundation\Cookie
实例的简单工厂。可以使用 withCookie
方法将 cookies 附加到 Response
实例:
$response = new Illuminate\Http\Response('Hello World');
$response->withCookie(cookie('name', 'value', $minutes));
创建一个永久有效的 Cookie*
“永久”实际上是指五年。
$response->withCookie(cookie()->forever('name', 'value'));
队列 Cookies
您还可以“队列”一个 cookie,以便在创建响应之前将其添加到传出的响应中:
<?php namespace App\Http\Controllers;
use Cookie;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
/**
* 更新资源
*
* @return Response
*/
public function update()
{
Cookie::queue('name', 'value');
return response('Hello World');
}
}
文件
检索上传的文件
$file = Request::file('photo');
确定是否上传了文件
if (Request::hasFile('photo'))
{
//
}
file
方法返回的对象是 Symfony\Component\HttpFoundation\File\UploadedFile
类的实例,该类扩展了 PHP 的 SplFileInfo
类,并提供了多种与文件交互的方法。
确定上传的文件是否有效
if (Request::file('photo')->isValid())
{
//
}
移动上传的文件
Request::file('photo')->move($destinationPath);
Request::file('photo')->move($destinationPath, $fileName);
其他文件方法
UploadedFile
实例上还有多种其他方法。有关这些方法的更多信息,请查看类的 API 文档。
其他请求信息
Request
类提供了许多方法来检查应用程序的 HTTP 请求,并扩展了 Symfony\Component\HttpFoundation\Request
类。以下是一些亮点。
检索请求 URI
$uri = Request::path();
确定请求是否使用 AJAX
if (Request::ajax())
{
//
}
检索请求方法
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
确定请求路径是否匹配模式
if (Request::is('admin/*'))
{
//
}
获取当前请求 URL
$url = Request::url();