前言
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 :-)
最新評論