Request
facade 允许你访问当前绑定容器的请求。例如:
$name = Request::input('name');
切记,如果你在一个命名空间中,你必须导入 Request
facade,接着在类的上方声明 use Request;
。
要通过依赖注入的方式取得 HTTP 请求的实例,你必须在控制器中的构造函数或方法对该类使用类型提示。当前请求的实例将会自动由服务容器注入:
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller {
/**
* Store a new user.
*
* @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 {
/**
* Update the specified user.
*
* @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
方法会将当前的输入数据存进 session中,所以下次用户发出请求时可以使用保存的数据:
Request::flash();
Request::flashOnly('username', 'email');
Request::flashExcept('password');
你很可能常常需要在重定向至前一页,并将输入数据存成一次性 Session。只要在重定向方法后的链式调用方法中传入输入数据,就能简单地完成。
return redirect('form')->withInput();
return redirect('form')->withInput(Request::except('password'));
若想要取得前一次请求所保存的一次性 Session,你可以使用 Request
实例中的 old
方法。
$username = Request::old('username');
如果你想在 Blade 模板显示旧输入数据,可以使用更加方便的辅助方法 old
:
{{ old('username') }}
Laravel 所建立的 cookie 会加密并且加上认证记号,这代表着被用户擅自更改的 cookie 会失效。
$value = Request::cookie('name');
辅助方法 cookie
提供一个简易的工厂方法来产生新的 Symfony\Component\HttpFoundation\Cookie
实例。可以在 Response
实例之后连接 withCookie
方法带入 cookie 至响应:
$response = new Illuminate\Http\Response('Hello World');
$response->withCookie(cookie('name', 'value', $minutes));
虽然说是“永远”,但真正的意思是五年。
$response->withCookie(cookie()->forever('name', 'value'));
You may also "queue" a cookie to be added to the outgoing response, even before that response has been created:
<?php namespace App\Http\Controllers;
use Cookie;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
/**
* Update a resource
*
* @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
的实例,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 = Request::path();
if (Request::ajax())
{
//
}
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
if (Request::is('admin/*'))
{
//
}
$url = Request::url();