Laravel - Middleware:您進行請求处理的關卡

你好,未來的 Laravel 開發者!今天,我們將深入 Laravel Middleware 的迷人世界。可以把 Middleware 想象成你應用程序的一位有用的安全警衛 - 在請求達到你的主要應用程序邏輯之前,它會檢查和處理請求。讓我們一起踏上這個令人興奮的旅程!

Laravel - Middleware

Middleware 是什麼?

在我們進入代碼之前,讓我們先了解一下 Middleware 是什麼。想像你正在舉辦一個派對(你的應用程序),並在門口有一個保鏢(Middleware)。這個保鏢可以:

  1. 檢查人們是否在名單上(身份驗證)
  2. 確保他們穿著得體(驗證)
  3. 給他們一個手環(在請求中添加信息)
  4. 或者甚至拒絕他們入內(終止請求)

這就是 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