這意味著當用戶(Laravel 視圖)向服務器(Laravel 控制器)發出請求時,請求將通過中間件。 這樣中間件可以檢查請求是否經過身份驗證:
Laravel 允許你 defi完成並使用附加中間件來執行除身份驗證之外的各種任務。
Laravel 中間件,例如身份驗證和 CSRF 保護,位於目錄中 應用程序/HTTP/中間件 .
因此我們可以說中間件是一個 http 請求過濾器,通過它可以驗證條件並執行操作。
要創建一個新的中間件,我們運行以下命令:
php artisan make:middleware <name-of-middleware>
我們創造了 middleware
我們稱之為 CheckAge
, artisan
會回答我們如下:
上面的窗口顯示中間件已成功創建,名稱為“ 檢查年齡 “。
查看CheckAge中間件是否創建,進入app/Http/Middleware文件夾下的項目,會看到新建的文件
新建的文件有如下代碼
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
要使用中間件,我們需要註冊它。
Laravel 中有兩種類型的中間件:
Middleware globale
Route Middleware
Il 全局中間件 將在來自應用程序的每個 HTTP 請求上執行,而 路由中間件 將被分配到一個特定的路徑。 中間件可以註冊在 應用程序/Http/Kernel.php。 該文件包含兩個屬性 $中間件 e $路由中間件 . $中間件屬性 用於註冊全局中間件和所有權 $路由中間件 用於註冊特定於路由的中間件。
要註冊全局中間件,請在 $middleware 屬性的末尾列出類。
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
要註冊特定於路由的中間件,請將鍵和值添加到 $routeMiddleware 屬性。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
我們創造了 檢查年齡 在前面的例子中。 我們現在可以在中間件路由屬性中註冊它。 此類註冊的代碼如下所示。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
我們也可以用中間件傳遞參數。
例如,如果您的應用程序具有不同的角色,如用戶、管理員、超級管理員等。 並且您想根據角色對操作進行身份驗證,可以通過使用中間件傳遞參數來實現。
我們創建的中間件包含以下函數,我們可以在參數後傳遞自定義參數 $下一步 .
public function handle($request, Closure $next)
{
return $next($request);
}
現在讓我們嘗試將角色參數設置為我們要從頭開始創建的新中間件,然後通過運行以下命令繼續創建角色中間件
修改handle方法如下
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
我們添加了參數 $role
, 以及方法內部的行 echo
寫入輸出角色的名稱。
現在讓我們為特定路徑註冊 RoleMiddleware 中間件
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
現在要使用參數測試中間件,我們需要創建一個請求和一個響應。 為了模擬響應,讓我們創建我們將調用 TestController 的控制器
php artisan make:controller TestController --plain
剛剛執行的命令將在文件夾中創建一個新的控制器 app/Http/TestController.php
, 並改變方法 index
用線 echo "<br>Test Controller.";
<?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.";
}
}
設置響應後,我們通過編輯文件來構建請求 routes.php
通過添加 route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
此時我們可以通過訪問 URL 來嘗試示例 http://localhost:8000/role
在瀏覽器中我們會看到這兩個 echo
Role editor
Test Controller
Il terminable Middleware
在響應發送到瀏覽器後執行一些任務。 這可以通過使用方法創建中間件來實現 終止於中間件。 Il terminable Middleware
必須註冊 middleware
全球的。 方法 terminate
將收到兩個參數 $請求 e $響應。
方法 Terminate
必須按以下代碼所示創建。
php artisan make:middleware TerminateMiddleware
一旦創建了中間件 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.";
}
}
在這種情況下,我們有一個方法 handle
和一個方法 terminate
有兩個參數 $request
e $response
.
現在讓我們註冊中間件
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
現在我們需要創建控制器來模擬響應
php artisan make:controller XYZController --plain
修改類的內容
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
現在我們需要編輯文件 routes/web.php
添加激活請求所需的路由
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
此時我們可以通過訪問 URL 來嘗試示例 http://localhost:8000/terminate
在瀏覽器中我們將看到以下幾行
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
你可能也喜歡: