- Laravel 教程
- Laravel - 首頁
- Laravel - 概述
- Laravel - 安裝
- Laravel - 應用結構
- Laravel - 配置
- Laravel - 路由
- Laravel - 中介軟體
- Laravel - 名稱空間
- Laravel - 控制器
- Laravel - 請求
- Laravel - Cookie
- Laravel - 響應
- Laravel - 檢視
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 資料庫操作
- Laravel - 錯誤與日誌
- Laravel - 表單
- Laravel - 本地化
- Laravel - Session
- Laravel - 驗證
- Laravel - 檔案上傳
- Laravel - 傳送郵件
- Laravel - Ajax
- Laravel - 錯誤處理
- Laravel - 事件處理
- Laravel - Facades
- Laravel - Contracts
- Laravel - CSRF 保護
- Laravel - 身份驗證
- Laravel - 授權
- Laravel - Artisan 命令列
- Laravel - 加密
- Laravel - 雜湊
- 理解發布流程
- Laravel - 客人使用者許可權
- Laravel - Artisan 命令
- Laravel - 分頁自定義
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用資源
- Laravel - 快速指南
- Laravel - 有用資源
- Laravel - 討論
Laravel - 中介軟體
中介軟體充當請求和響應之間的橋樑,它是一種過濾機制。本章將向您解釋 Laravel 中的中介軟體機制。
Laravel 包含一箇中間件,用於驗證應用程式的使用者是否已透過身份驗證。如果使用者已透過身份驗證,則重定向到主頁;否則,重定向到登入頁面。
可以透過執行以下命令建立中介軟體:
php artisan make:middleware <middleware-name>
將**<middleware-name>**替換為您中介軟體的名稱。您建立的中介軟體可以在**app/Http/Middleware**目錄中看到。
示例
觀察以下示例以瞭解中介軟體機制:
**步驟 1** - 現在讓我們建立 AgeMiddleware。為此,我們需要執行以下命令:
php artisan make:middleware AgeMiddleware
**步驟 2** - 命令成功執行後,您將收到以下輸出:
**步驟 3** - **AgeMiddleware** 將在 **app/Http/Middleware** 中建立。新建立的檔案將已經為您建立了以下程式碼。
<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
public function handle($request, Closure $next) {
return $next($request);
}
}
註冊中介軟體
在使用中介軟體之前,我們需要註冊每一箇中間件。Laravel 中有兩種型別的中介軟體。
- 全域性中介軟體
- 路由中介軟體
**全域性中介軟體**將在應用程式的每個 HTTP 請求上執行,而**路由中介軟體**將分配給特定路由。中介軟體可以在**app/Http/Kernel.php**中註冊。此檔案包含兩個屬性**$middleware**和**$routeMiddleware**。**$middleware**屬性用於註冊全域性中介軟體,**$routeMiddleware**屬性用於註冊特定於路由的中介軟體。
要註冊全域性中介軟體,請在 $middleware 屬性的末尾列出類。
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ];
要註冊特定於路由的中介軟體,請向 $routeMiddleware 屬性新增鍵值對。
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
示例
我們在前面的示例中建立了**AgeMiddleware**。我們現在可以在特定於路由的中介軟體屬性中註冊它。註冊程式碼如下所示。
以下是**app/Http/Kernel.php**的程式碼:
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'Age' => \App\Http\Middleware\AgeMiddleware::class,
];
}
中介軟體引數
我們還可以將引數與中介軟體一起傳遞。例如,如果您的應用程式具有不同的角色,例如使用者、管理員、超級管理員等,並且您希望根據角色對操作進行身份驗證,則可以透過傳遞中介軟體引數來實現此目的。我們建立的中介軟體包含以下函式,我們可以在**$next**引數之後傳遞自定義引數。
public function handle($request, Closure $next) {
return $next($request);
}
示例
**步驟 1** - 透過執行以下命令建立 RoleMiddleware:
php artisan make:middleware RoleMiddleware
**步驟 2** - 成功執行後,您將收到以下輸出:
**步驟 3** - 在新建立的 **app/Http/Middleware/RoleMiddleware.php** 檔案的 handle 方法中新增以下程式碼。
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
**步驟 4** - 在 **app\Http\Kernel.php** 檔案中註冊 RoleMiddleware。在該檔案中新增灰色突出顯示的行以註冊 RoleMiddleware。
**步驟 5** - 執行以下命令建立 **TestController**:
php artisan make:controller TestController --plain
**步驟 6** - 成功執行上述步驟後,您將收到以下輸出:
**步驟 7** - 將以下程式碼複製到 **app/Http/TestController.php** 檔案。
app/Http/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
**步驟 8** - 在 **app/Http/routes.php** 檔案中新增以下程式碼行。
app/Http/routes.php
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
**步驟 9** - 訪問以下 URL 以測試帶引數的中介軟體
https://:8000/role
**步驟 10** - 輸出將如下圖所示。
可終止中介軟體
可終止中介軟體在響應已傳送到瀏覽器後執行某些任務。這可以透過在中介軟體中建立具有**terminate**方法的中介軟體來實現。可終止中介軟體應與全域性中介軟體一起註冊。terminate 方法將接收兩個引數**$request**和**$response**。可終止方法可以像以下程式碼所示建立。
示例
**步驟 1** - 透過執行以下命令建立 **TerminateMiddleware**。
php artisan make:middleware TerminateMiddleware
**步驟 2** - 以上步驟將產生以下輸出:
**步驟 3** - 將以下程式碼複製到新建立的 **app/Http/Middleware/TerminateMiddleware.php** 檔案。
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
**步驟 4** - 在 **app\Http\Kernel.php** 檔案中註冊 **TerminateMiddleware**。在該檔案中新增灰色突出顯示的行以註冊 TerminateMiddleware。
**步驟 5** - 執行以下命令建立 **ABCController**。
php artisan make:controller ABCController --plain
**步驟 6** - URL 成功執行後,您將收到以下輸出:
**步驟 7** - 將以下程式碼複製到 **app/Http/ABCController.php** 檔案。
app/Http/ABCController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ABCController extends Controller {
public function index() {
echo "<br>ABC Controller.";
}
}
**步驟 8** - 在 **app/Http/routes.php** 檔案中新增以下程式碼行。
app/Http/routes.php
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
**步驟 9** - 訪問以下 URL 以測試可終止中介軟體。
https://:8000/terminate
**步驟 10** - 輸出將如下圖所示。