Laravel - Middleware:您進行請求处理的關卡
你好,未來的 Laravel 開發者!今天,我們將深入 Laravel Middleware 的迷人世界。可以把 Middleware 想象成你應用程序的一位有用的安全警衛 - 在請求達到你的主要應用程序邏輯之前,它會檢查和處理請求。讓我們一起踏上這個令人興奮的旅程!
Middleware 是什麼?
在我們進入代碼之前,讓我們先了解一下 Middleware 是什麼。想像你正在舉辦一個派對(你的應用程序),並在門口有一個保鏢(Middleware)。這個保鏢可以:
- 檢查人們是否在名單上(身份驗證)
- 確保他們穿著得體(驗證)
- 給他們一個手環(在請求中添加信息)
- 或者甚至拒絕他們入內(終止請求)
這就是 Middleware 在你的 Laravel 應用程序中所做的!
註冊 Middleware
現在,讓我們看看如何創建和註冊我們自己的 Middleware。
創建 Middleware
首先,我們將創建一個簡單的 Middleware,用於檢查用戶是否年滿 18 歲:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}
return $next($request);
}
}
在這個例子中,我們的 CheckAge
Middleware 檢查請求中的 age
參數是否超過 18 歲。如果不是,它將重定向到首頁。否則,它將請求傳遞給下一個 Middleware 或主要應用程序。
註冊全局 Middleware
要全局使用這個 Middleware(對所有路由),我們需要在 app/Http/Kernel.php
文件中註冊它:
protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];
註冊路由 Middleware
如果你只想對特定路由使用 Middleware,你可以將其註冊為路由 Middleware:
protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];
然後,你可以像這樣在路由中使用它:
Route::get('adult-only', function () {
//
})->middleware('checkage');
Middleware 參數
有時,我們希望 Middleware 更具靈活性。這就是 Middleware 參數派上用場的時候!
讓我們修改我們的 CheckAge
Middleware,使其接受一個最小年齡參數:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}
return $next($request);
}
}
現在,我們可以使用這個 Middleware 設置不同的年齡限制:
Route::get('adult-only', function () {
//
})->middleware('checkage:18');
Route::get('senior-only', function () {
//
})->middleware('checkage:65');
這不是很棒嗎?我們使 Middleware 可重用於不同的場景!
可終止 Middleware
有時,我們希望 Middleware 在響應發送到瀏覽器後執行某事。這就是可終止 Middleware 發揮作用的時候!
讓我們創建一個 Middleware 來記錄響應時間:
<?php
namespace App\Http\Middleware;
use Closure;
class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);
return $next($request);
}
public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}
這個 Middleware 在請求中添加了一個 start_time
,然後在響應發送後記錄總響應時間。
要使用可終止 Middleware,請確保它在你的 app/Http/Kernel.php
文件中註冊:
protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];
Middleware 方法
以下是你在使用 Middleware 時會用到的主要方法:
方法 | 描述 |
---|---|
handle() |
Middleware 的主要邏輯。處理請求並可選地將其傳遞給下一個 Middleware。 |
terminate() |
在響應發送到瀏覽器後執行。用於清理或記錄。 |
結論
這就是 Middleware,各位!我們一起穿過了 Laravel Middleware 的領地,從創建和註冊 Middleware 到使用參數和可終止 Middleware。記住,Middleware 就像請求处理的瑞士軍刀 - 它多用途、強大,是你在 Laravel 工具箱中的必需品。
在你繼續你的 Laravel 冒險時,你會發現無數創造性的方法來使用 Middleware。也許你會創建 Middleware 來檢查維護模式、記錄請求,或者甚至轉換請求数據。可能性無限!
繼續編碼,繼續學習,最重要的是,玩得開心!直到下次,快樂的 Laravel 開發!
Credits: Image by storyset