Laravel 中的中间件是什么?

laravelphpserver side programming更新于 2025/10/7 13:52:17

中间件是 Laravel 中的一个保护层。它有助于过滤下发的 http 请求。它充当请求和响应之间的中间层。

例如 - Laravel 会检查登录的用户是否是经过身份验证的用户。请求必须经过中间件。如果是经过身份验证的用户,则用户将获得通过,否则将被注销。

使用中间件的另一个示例是年龄限制。如果用户未达到某个年龄范围,则允许用户访问某些页面,否则禁止访问。

中间件文件夹位于 app/Http/ 中。

您可以使用以下命令创建中间件 -

php artisan make:middleware<middleware-name>

让我们创建如下所示的 AgeMiddleware -

php artisan make:middleware AgeMiddleware

AgeMiddleware 内部的代码如下 -

我们在 handle 函数中添加了代码 echo "<h1>Inside Age MiddleWare</h1>"; ,以便在使用中间件时显示消息。

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class AgeMiddleware { public function handle(Request $request, Closure $next) { echo "<h1>Inside Age MiddleWare</h1>"; return $next($request); } }

要使用中间件,我们需要注册它。有三种类型的中间件可用。

全局中间件

全局中间件将在应用程序的每个 HTTP 请求上运行,而路由中间件将被分配给特定的路由。中间件可以在 app/Http/Kernel.php 中注册。该文件包含两个属性:$middleware 、$middlewareGroups 和 $routeMiddleware 。$middleware 属性用于注册全局中间件,$routeMiddleware 属性用于注册特定于路由的中间件。

要注册全局中间件,请在 $middleware 属性的末尾列出该类。在 $middleware 中添加我们刚刚创建的 AgeMiddleware,如下所示 -

protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Fruitcake\Cors\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \App\Http\Middleware\AgeMiddleware::class, ];

如果要将中间件应用于整个网站,最好在 $middleware 中全局声明它。

RouteMiddleWare

现在让我们在路由上使用已经创建的 AgeMiddleware。为此,我们需要将 AgeMiddleware 添加到 routemiddleware 变量中,如下所示 -

protected $routeMiddleware = [ 'auth' =>\App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::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\AgeMiddleware::class, ];

GroupMiddleware

您可以在多个路由页面上使用 groupmiddleware。我们已经创建了 /homepage 和 /logout 页面,让我们在已创建的路由中添加一个 /userpage。

现在,让我们将创建的 AgeMiddleware 添加到 groupmiddleware 数组中,如下所示 -

protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'mypage'=>[ \App\Http\Middleware\AgeMiddleware::class, ] ];

现在让我们在应用程序中测试全局中间件。由于全局中间件在所有地方都适用,因此我们应该在所有地方都能在 Agemiddleware 中添加消息。

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class AgeMiddleware { public function handle(Request $request, Closure $next) { echo "<h1>Inside Age MiddleWare</h1>"; return $next($request); } }

检查任何路线,您应该看到全局中间件被调用。


相关文章