首頁>技術>

前言

Laravel5中我們處理request請求,中間會有很多環節。本文所說的中介軟體,位於路由和控制器之間,起到過濾和篩選請求的作用。

為什麼不放到“表單驗證”裡呢?

因為有些請求,我們可能不太理會表單內容,或者想要在表單資料注入控制器方法之前,就進行攔截,那麼,中介軟體無疑是一個好的選擇。

建立中介軟體

下面示例,建立一箇中間件,用於判斷使用者是否進行了“實名認證”。如果驗證過,則通過;未驗證,則返回提示資訊。

首先使用指令

php artisan make:middleware CheckRealname

這會在 App\\Http\\Middleware名稱空間下新建一個類檔案 CheckRealname.php。

下面我們在類檔案內填充程式碼。

<?phpnamespace App\\Http\\Middleware;use Closure;class CheckRealname{    /**     * 處理傳入的請求,假設使用者授權登入     *     * @param  \\Illuminate\\Http\\Request  $request     * @param  \\Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        if (!auth()->user()->is_realname) {            return response()->json(['code'=>0,'msg'=>'請先進行實名驗證']);        }        return $next($request);    }}

上述程式碼根據使用者授權狀態獲取使用者例項,並查詢欄位is_realname,判斷使用者的“實名驗證”狀態。如果沒有驗證,使用

response()->json()

構造一個JSON響應資料返回給客戶端。那麼接下來的請求都不需要進行。

如果是驗證過的使用者,使用

return $next($request)

繼續後面的邏輯處理。

註冊中介軟體

完成中介軟體的類程式碼後,我們需要註冊到 路由中介軟體,並讓系統賦予全域性可訪問的方式。

在檔案 App\\Http\\Kernel.php 內新增一下內容。

// 在 App\\Http\\Kernel 類中...protected $routeMiddleware = [    'auth' => \\App\\Http\\Middleware\\Authenticate::class,    'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,    'bindings' => \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,    'cache.headers' => \\Illuminate\\Http\\Middleware\\SetCacheHeaders::class,    'can' => \\Illuminate\\Auth\\Middleware\\Authorize::class,    'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,    'signed' => \\Illuminate\\Routing\\Middleware\\ValidateSignature::class,    'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,    'verified' => \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class,        // 驗證是否實名認證    'user.realname' => \\App\\http\\Middleware\\CheckRealname::class,];

這樣系統內就可以在路由控制內呼叫該中介軟體用於驗證了。

呼叫中介軟體

呼叫中介軟體在路由規則內書寫。類似下面這樣的寫法:

Route::get('user/profile', function () {    // 邏輯程式碼,可直接執行})->middleware('auth', 'user.realname');

除了使用路由中介軟體名字的方式,還可以使用使用中介軟體類,如下:

Route::get('user/profile', function () {    // 邏輯程式碼,可直接執行})->middleware(CheckRealname::class);

需要注意的是,在頭部 use 引用中,將類 CheckRealname 通過名稱空間引入。

結語

好了,上面就是laravel自定義中介軟體的使用過程,相信大家可以很快掌握。

自定義的中介軟體可以為我們處理更為複雜的邏輯,也使控制器程式碼更為整潔,不會把所有邏輯都堆在控制器內,維護起來臃腫冗餘。

Happy coding :-)

68

PHP

JSON

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Junit5 + YAML 引數化和資料驅動,讓 App 自動化測試更高效(二)