作為一款流行的php框架,laravel 在開發(fā)過程中經(jīng)常使用middleware中間件。在本文中,我們將涵蓋使用 laravel 中間件的基礎(chǔ)知識(shí)以及如何創(chuàng)建和使用自定義 middleware 中間件。
Laravel Middleware 中間件是一種用于過濾 HTTP 請求的機(jī)制。它們通常用于處理復(fù)雜的 HTTP 請求邏輯,例如驗(yàn)證用戶身份、授予訪問權(quán)限或記錄請求日志。
Laravel自帶了一些內(nèi)置的 Middleware 中間件,例如:
- auth: 用于檢查用戶是否已登錄。
- throttle: 用于限制用戶在一定時(shí)間內(nèi)可以進(jìn)行的請求次數(shù)。
在本文中,我們將使用 Laravel 自帶的 Middleware 中間件來演示這些基本概念。此外,我們還將創(chuàng)建自定義 Middleware 中間件,以演示如何編寫自己的中間件。
使用內(nèi)置 Middleware 中間件
讓我們首先看一下如何在 Laravel 中使用內(nèi)置 Middleware 中間件。要使用內(nèi)置中間件,您只需要將其添加到$routeMiddleware數(shù)組中。在appHttpKernel.php文件中,可以找到該數(shù)組。這個(gè)數(shù)組包含了所有默認(rèn)的中間件,并且每個(gè)中間件都有一個(gè)與其關(guān)聯(lián)的鍵名。
例如,我們可以通過使用auth鍵名來啟用認(rèn)證中間件:
protected $routeMiddleware = [ 'auth' => IlluminateAuthMiddlewareAuthenticate::class, ];
Laravel 還支持對(duì)中間件進(jìn)行參數(shù)化傳遞。例如,如果我們要使用throttle限制用戶在60秒內(nèi)最多可以訪問5個(gè)頁面,可以這么寫:
protected $routeMiddleware = [ 'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class.':5,60', ];
注意:這里的數(shù)字順序與throttle中間件構(gòu)造函數(shù)的參數(shù)順序相反。這是因?yàn)長aravel支持用字符串傳遞參數(shù)。
創(chuàng)建自定義 Middleware 中間件
除了使用預(yù)先定義的 Middleware 中間件外,Laravel 還支持創(chuàng)建自己的中間件。讓我們看一下如何創(chuàng)建并使用自定義 Middleware 中間件。
為了演示這點(diǎn),我們將創(chuàng)建一個(gè)名為MyMiddleware 的自定義中間件。這個(gè)中間件只需要在請求處理之前輸出文本即可。
首先,我們需要通過artisan命令創(chuàng)建一個(gè)中間件類:
php artisan make:middleware MyMiddleware
然后,我們需要打開app/Http/Middleware/MyMiddleware.php文件,并在handle方法中編寫我們的中間件邏輯:
<?php namespace AppHttpMiddleware; use Closure; class MyMiddleware { public function handle($request, Closure $next) { echo "My middleware is working!"; return $next($request); } }
在這個(gè)例子中,我們只需要在處理請求之前先輸出一條文本。這個(gè)文本可以是任何內(nèi)容,例如您可以輸出一些調(diào)試信息、日志或錯(cuò)誤信息等等。
在編寫了我們的 Middleware 中間件之后,我們需要將其注冊到 Laravel 應(yīng)用程序中。在app/Http/Kernel.php文件中,我們可以將我們的中間件類名稱添加到$routeMiddleware數(shù)組中。這將使中間件可用于路由和控制器。
protected $routeMiddleware = [ 'mymiddleware' => AppHttpMiddlewareMyMiddleware::class, ];
注意:如您所見,我們將MyMiddleware類的名稱作為鍵名,以便在后面的路由和控制器中使用。
要使用這個(gè)新的中間件,只需要將其添加到照常的middleware數(shù)組中即可。在我們的例子中,我們可以將其添加到網(wǎng)站的路由中:
Route::middleware(['mymiddleware'])->group(function () { // Your routes here });
現(xiàn)在,當(dāng)我們接收到來自應(yīng)用程序的請求時(shí),我們的中間件將會(huì)首先被調(diào)用,然后再進(jìn)行請求處理。
總結(jié)
在本文中,我們已經(jīng)討論了 Laravel 中 Middleware 中間件的基礎(chǔ)知識(shí),并演示了如何使用 Laravel 內(nèi)置的中間件以及如何創(chuàng)建和使用自定義 Middleware 中間件。這里只是一個(gè)簡單的示例,Middleware 中間件的概念非常重要,它們可以用來解決許多處理 HTTP 請求的復(fù)雜問題。因此,在 Laravel 開發(fā)過程中,學(xué)習(xí)如何使用 Middleware 中間件是非常重要的一步。