Laravel中間件

正如其名稱提示,中間件作爲請求和響應之間的中間人。它是一種過濾機制類型。例如,Laravel包括一箇中間件用來驗證應用程序的用戶認證與否。如果用戶通過驗證,它將被重定向到主頁,否則將被重定向到登錄頁面。

中間件可以通過執行以下命令來創建 -

php artisan make:middleware  

使用你的中間件名稱替換。創建可以看到中間件在 app/Http/Middleware 目錄。

示例

第1步 - 現在,讓我們創建 AgeMiddleware 中間件。我們需要執行下面的命令-

php artisan make:middleware AgeMiddleware

第2步 - 命令成功執行後,會收到以下輸出 -
Laravel中間件

第3步 − AgeMiddlware 會在 app/Http/Middleware 文件中創建。新創建的文件將自動創建下面代碼:

\\App\\Http\\Middleware\\Authenticate::class, 'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class, 'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class, \]; ### 示例 我們已經在前面的例子中已創建 AgeMiddleware 中間件。 現在,我們可以在具體的路由中間件屬性登記。註冊代碼如下所示。 以下是應用程序代碼  **app/Http/Kernel.php** \\App\\Http\\Middleware\\Authenticate::class, 'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class, 'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class, 'Age' => \\App\\Http\\Middlware\\AgeMiddleware::class, \]; } 中間件參數 --------- 我們也可以傳遞中間件參數。例如,如果您的應用程序有不同角色,如用戶,管理員,超級管理員等,並且要驗證基於角色的動作,這可以通過參數傳遞中間件來實現。我們創建的中間件包含以下功能,我們可以通過 $next 參數之後,自定義參數。 public function handle($request, Closure $next) { return $next($request); } ### 示例 第1步 - 通過執行以下命令創建角色中間件 - php artisan make:middleware RoleMiddleware 第2步 - 成功執行後,會收到以下輸出 ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-12.png) 第3步  − 添加以下代碼到新創建的角色中間件的處理方法 - app/Http/Middleware/RoleMiddleware.php. Test Controller."; } } 第8步 - 添加下面一行代碼到 app/Http/routes.php 文件。 app/Http/routes.php Route::get('role',\[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', \]); 第9步 - 訪問以下網址來測試帶參數中間件 [https://asset.1ju.org/role](https://asset.1ju.org/role) 第10步 - 輸出顯示如下圖中所示。 ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-14.png) 可終止的中間件 ----------- 響應已經發送給瀏覽器後可終止中間件執行一些任務。這可以通過使用創建中間件「終止」方法的中間件來實現。可終止中間件會註冊全局中間件。該終止方法將接受兩個參數:$request 和 $response。終止方法可以被創建,如在下面顯示的代碼。 ### 示例 第1步- 通過執行以下命令創建 TerminateMiddleware 中間件。 php artisan make:middleware TerminateMiddleware 第2步 - 這將產生以下輸出 - ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-15.png) 第3步 - 複製下面的代碼到新創建文件 - TerminateMiddleware 在 ***app/Http/Middleware/TerminateMiddleware.php*** 文件中如下: Executing statements of terminate method of TerminateMiddleware."; } } 第4步  − 註冊 TerminateMiddleware 到 **app\\Http\\Kernel.php** 文件中. ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-8.jpg) 加了灰色突出的線條的是該文件中註冊的 TerminateMiddleware 中間件。 第5步 - 執行以下命令來創建一個控制器。 php artisan make:controller ABCController 第6步 - URL成功執行後,會收到以下輸出 - ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-16.png) 第7步 - 將以下代碼複製到  **app/Http/ABCController.php** 文件。 ***app/Http/ABCController.php*** ABC Controller."; } } 第8步 - 添加下面的一行代碼到  **app/Http/routes.php** 文件。 ***app/Http/routes.php*** Route::get('terminate',\[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', \]); 第9步 - 訪問以下網址測試可終止中間件。 https://asset.1ju.org/terminate 第10步 - 如下面的圖片輸出的結果。 ![Laravel中間件](https://asset.1ju.org/cmsstatic/laravel-17.png)