Request
facade 允許你訪問(wèn)當(dāng)前綁定容器的請(qǐng)求。例如:
$name = Request::input('name');
切記,如果你在一個(gè)命名空間中,你必須導(dǎo)入 Request
facade,接著在類的上方聲明 use Request;
。
要通過(guò)依賴注入的方式取得 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 {
/**
* Store a new user.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
}
你可以通過(guò) 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)易的工廠方法來(lái)產(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));
雖然說(shuō)是「永遠(yuǎn)」,但真正的意思是五年。
$response->withCookie(cookie()->forever('name', 'value'));
$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();
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
if (Request::is('admin/*'))
{
//
}
$url = Request::url();