Laravel 教程:中间件(一种过滤机制)
php artisan make:middleware <middleware-name>
将 替换为您的中间件名称。创建您可以在 app/Http/Middleware 目录中看到的中间件。
示例
第 1 步 – 现在让我们创建 AgeMiddleware 中间件。我们需要执行以下命令 -php artisan make:middleware AgeMiddleware步骤 2 - 成功执行命令后,您将得到以下输出 -

步骤 3 - AgeMiddlware 将在 app/Http/Middleware 文件中创建。新创建的文件会自动生成如下代码:
<?php namespace App\Http\Middleware; use Closure; class AgeMiddleware { public function handle($request, Closure $next) { return $next($request); } }中间件的注册 在使用之前,我们必须注册每个中间件。 Laravel 中有两种类型的中间件。
- 全局中间件
- 路由中间件
全局中间件将在应用程序的每个 HTTP 请求上运行,而路由中间件将分配到特定路径。中间件可以在 app/Http/Kernel.php 注册。
该文件包含两个属性:$middleware 和 $routeMiddleware。 $middleware 属性用于注册全局中间件,$routeMiddleware 属性用于注册特定于路由的中间件。要注册全局中间件,请在 $middleware 属性末尾列出类。
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ];要注册特定于路由的中间件,请将键和值添加到 $routeMiddleware 属性。
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
示例
在前面的示例中,我们已经创建了 AgeMiddleware 中间件。现在我们可以在特定的路由中间件中注册属性了。注册码如下所示。下面是应用程序代码 app/Http/Kernel.php
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'Age' => \App\Http\Middlware\AgeMiddleware::class, ]; }中间件参数
我们还可以传递中间件参数。例如,如果您的应用程序具有不同的角色,例如用户、管理员、超级管理员等,并且您想要验证基于角色的操作,则可以通过参数传递中间件来实现。我们创建的中间件包括以下功能。我们可以自定义$next参数后面的参数。?如何处理新创建的角色中间件 - app/Http/Middleware/RoleMiddleware.php。
<?php namespace App\Http\Middleware; use Closure; class RoleMiddleware { public function handle($request, Closure $next, $role) { echo "Role: ".$role; return $next($request); } }
步骤 4 - 在 app\Http\Kernel.php 文件中注册角色中间件。通过添加灰色突出显示的行,RoleMiddleware 中间件已在此文件中注册。 ?复制到 app/Http/TestController.php 文件。
app/Http/TestController.php
<?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."; } }步骤 8 – 将以下代码行添加到 app/Http/routes.php 文件中。
app/Http/routes.php
Route::get('role',[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', ]);步骤 9 – 访问以下 URL 并使用参数
http://localhost:8000/role 步骤 10 – 输出如下图所示。
可终止中间件
可终止中间件在向浏览器发送响应后执行一些任务。这可以通过使用创建中间件“终止”方法的中间件来实现。可终止中间件注册全局中间件。 exit 方法将接受两个参数:$request 和 $response。可以创建退出方法,如下面的代码所示。
示例
步骤 1 - 通过执行以下命令创建 TerminateMiddleware 中间件。 ?如下:<?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."; } }
第 4 步 - 在文件 app\Http\Kernel.php 中注册 TerminateMiddleware。
灰色突出显示的行将添加到此文件中 注册 TerminateMiddleware 中间件。步骤 5 - 运行以下命令来创建驱动程序。 ?
app/Http/ABCController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ABCController extends Controller { public function index(){ echo "<br>ABC Controller."; } }第 8 步 – 将以下代码行添加到 app/Http/routes.php 。
app/Http/routes.php
Route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', ]);步骤 9 – 访问以下 URL 并测试终止中间件。
http://localhost:8000/terminate 步骤 10 – 输出如下图所示。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。