欢迎各位兄弟 发布技术文章
这里的技术是共享的
要通过依赖注入获取当前HTTP Request的实例, 你应该在控制器构造器,或方法中 type-hint (类型约束)Illuminate\Http\Request
类, 当前request 实例会被服务容器自动注入:
<?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请求, Laravel 的 Illuminate\Http\Request
继承了Symfony\Component\HttpFoundation\Request 类, 这里有几个更有用的类方法:
Path方法返回请求的URI, 因此,如果请求的目标是 http://domain.com/foo/bar
, Path方法会返回 foo/bar
:
$url = $request->url();
use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) { // });
你可以通过 Illuminate\Http\Request
的实例,经由几个简洁的方法取得所有的用户输入数据。不需要担心发出请求时使用的 HTTP 请求,取得输入数据的方式都是相同的。
$input = $request->input('products.0.name');
确认是否有输入数据,用has方法,返回true如果有值且不为空。
$input = Request::only('username', 'password'); $input = Request::except('credit_card');
Laravel 可以让你保留这次的输入数据,直到下一次请求发送前。例如,你可能需要在表单验证失败后重新填入表单值。
Illuminate\Http\Request实例中的
flash
方法会将当前的输入数据存进 session中,所以下次用户发出请求时可以使用保存的数据:
return redirect('form')->withInput(); return redirect('form')->withInput(Request::except('password'));
若想要取得前一次请求所保存的一次性 Session,你可以使用 Request
实例中的 old
方法。
$value = Request::cookie('name');
辅助方法 cookie
提供一个简易的工厂方法来产生新的 Symfony\Component\HttpFoundation\Cookie
实例。可以在 Response
实例之后连接withCookie
方法带入 cookie 至响应:
<?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'); } }
if (Request::file('photo')->isValid()) { // }
这个move方法从暂时目录移动文件到一个你指定的永久目录, (PHP配置决定暂时目录)
if (Request::ajax()) { // }
$url = Request::url();