Request
facade 允許你訪問當(dāng)前綁定容器的請(qǐng)求。例如:
$name = Request::input('name');
切記,如果你在一個(gè)命名空間中,你必須導(dǎo)入 Request
facade,接著在類的上方聲明 use Request;
。
要通過依賴注入的方式取得 HTTP 請(qǐng)求的實(shí)例,你必須在控制器中的構(gòu)造函數(shù)或方法對(duì)該類使用類型提示。當(dāng)前請(qǐng)求的實(shí)例將會(huì)自動(dòng)由服務(wù)容器注入:
<?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'); // }}
如果你的控制器也有從路由參數(shù)傳入的輸入數(shù)據(jù),只需要將路由參數(shù)置于其他依賴之后:
<?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
的實(shí)例,經(jīng)由幾個(gè)簡(jiǎn)潔的方法取得所有的用戶輸入數(shù)據(jù)。不需要擔(dān)心發(fā)出請(qǐng)求時(shí)使用的 HTTP 請(qǐng)求,取得輸入數(shù)據(jù)的方式都是相同的。
$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');
如果是「數(shù)組」形式的輸入數(shù)據(jù),可以使用「點(diǎn)」語(yǔ)法取得數(shù)組:
$input = Request::input('products.0.name');
Laravel 可以讓你保留這次的輸入數(shù)據(jù),直到下一次請(qǐng)求發(fā)送前。例如,你可能需要在表單驗(yàn)證失敗后重新填入表單值。
flash
方法會(huì)將當(dāng)前的輸入數(shù)據(jù)存進(jìn) session中,所以下次用戶發(fā)出請(qǐng)求時(shí)可以使用保存的數(shù)據(jù):
Request::flash();
Request::flashOnly('username', 'email');Request::flashExcept('password');
你很可能常常需要在重定向至前一頁(yè),并將輸入數(shù)據(jù)存成一次性 Session。只要在重定向方法后的鏈?zhǔn)秸{(diào)用方法中傳入輸入數(shù)據(jù),就能簡(jiǎn)單地完成。
return redirect('form')->withInput();return redirect('form')->withInput(Request::except('password'));
若想要取得前一次請(qǐng)求所保存的一次性 Session,你可以使用 Request
實(shí)例中的 old
方法。
$username = Request::old('username');
如果你想在 Blade 模板顯示舊輸入數(shù)據(jù),可以使用更加方便的輔助方法 old
:
{{ old('username') }}
Laravel 所建立的 cookie 會(huì)加密并且加上認(rèn)證記號(hào),這代表著被用戶擅自更改的 cookie 會(huì)失效。
$value = Request::cookie('name');
輔助方法 cookie
提供一個(gè)簡(jiǎn)易的工廠方法來產(chǎn)生新的 Symfony\Component\HttpFoundation\Cookie
實(shí)例??梢栽?Response
實(shí)例之后連接 withCookie
方法帶入 cookie 至響應(yīng):
$response = new Illuminate\Http\Response('Hello World');$response->withCookie(cookie('name', 'value', $minutes));
雖然說是「永遠(yuǎn)」,但真正的意思是五年。
$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
方法返回的對(duì)象是 Symfony\Component\HttpFoundation\File\UploadedFile
的實(shí)例,UploadedFile
繼承了 PHP 的 SplFileInfo
類并且提供了很多和文件交互的方法。
if (Request::file('photo')->isValid()){ //}
Request::file('photo')->move($destinationPath);Request::file('photo')->move($destinationPath, $fileName);
UploadedFile
的實(shí)例還有許多可用的方法,可以至該對(duì)象的 API 文檔了解有關(guān)這些方法的詳細(xì)信息。
Request
類提供很多方法檢查 HTTP 請(qǐng)求,它繼承了 Symfony\Component\HttpFoundation\Request
類,下面是一些使用方式。
$uri = Request::path();
if (Request::ajax()){ //}
$method = Request::method();if (Request::isMethod('post')){ //}
if (Request::is('admin/*')){ //}
$url = Request::url();
更多建議: