HTTP 請(qǐng)求

2018-12-17 10:41 更新

取得請(qǐng)求實(shí)例

通過 Facade

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)
    {
        //    }}

           

           

取得輸入數(shù)據(jù)

取得特定輸入數(shù)據(jù)

你可以通過 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');

           

取得特定輸入數(shù)據(jù),若沒有則取得默認(rèn)值

$name = Request::input('name', 'Sally');

           

確認(rèn)是否有輸入數(shù)據(jù)

if (Request::has('name')){
    //}

           

取得所有發(fā)出請(qǐng)求時(shí)傳入的輸入數(shù)據(jù)

$input = Request::all();

           

取得部分發(fā)出請(qǐng)求時(shí)傳入的輸入數(shù)據(jù)

$input = Request::only('username', 'password');$input = Request::except('credit_card');

           

如果是「數(shù)組」形式的輸入數(shù)據(jù),可以使用「點(diǎn)」語(yǔ)法取得數(shù)組:

$input = Request::input('products.0.name');

           

           

舊輸入數(shù)據(jù)

Laravel 可以讓你保留這次的輸入數(shù)據(jù),直到下一次請(qǐng)求發(fā)送前。例如,你可能需要在表單驗(yàn)證失敗后重新填入表單值。

將輸入數(shù)據(jù)存成一次性 Session

flash 方法會(huì)將當(dāng)前的輸入數(shù)據(jù)存進(jìn) session中,所以下次用戶發(fā)出請(qǐng)求時(shí)可以使用保存的數(shù)據(jù):

Request::flash();

           

將部分輸入數(shù)據(jù)存成一次性 Session

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'));

           

取得舊輸入數(shù)據(jù)

若想要取得前一次請(qǐng)求所保存的一次性 Session,你可以使用 Request 實(shí)例中的 old 方法。

$username = Request::old('username');

           

如果你想在 Blade 模板顯示舊輸入數(shù)據(jù),可以使用更加方便的輔助方法 old

{{ old('username') }}

           

           

Cookies

Laravel 所建立的 cookie 會(huì)加密并且加上認(rèn)證記號(hào),這代表著被用戶擅自更改的 cookie 會(huì)失效。

取得 Cookie 值

$value = Request::cookie('name');

           

加上新的 Cookie 到響應(yīng)

輔助方法 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));

           

建立永久有效的 Cookie*

雖然說是「永遠(yuǎn)」,但真正的意思是五年。            

$response->withCookie(cookie()->forever('name', 'value'));

           

Queueing Cookies

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');

           

確認(rèn)文件是否有上傳

if (Request::hasFile('photo')){
    //}

           

file 方法返回的對(duì)象是 Symfony\Component\HttpFoundation\File\UploadedFile 的實(shí)例,UploadedFile 繼承了 PHP 的 SplFileInfo 類并且提供了很多和文件交互的方法。

確認(rèn)上傳的文件是否有效

if (Request::file('photo')->isValid()){
    //}

           

移動(dòng)上傳的文件

Request::file('photo')->move($destinationPath);Request::file('photo')->move($destinationPath, $fileName);

           

其他上傳文件的方法

UploadedFile 的實(shí)例還有許多可用的方法,可以至該對(duì)象的 API 文檔了解有關(guān)這些方法的詳細(xì)信息。

           

其他的請(qǐng)求信息

Request 類提供很多方法檢查 HTTP 請(qǐng)求,它繼承了 Symfony\Component\HttpFoundation\Request 類,下面是一些使用方式。

取得請(qǐng)求 URI

$uri = Request::path();

           

判斷一個(gè)請(qǐng)求是否使用了 AJAX

if (Request::ajax()){
    //}

           

取得請(qǐng)求方法

$method = Request::method();if (Request::isMethod('post')){
    //}

           

確認(rèn)請(qǐng)求路徑是否符合特定格式

if (Request::is('admin/*')){
    //}

           

取得請(qǐng)求 URL

$url = Request::url();


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)