php artisan make:middleware <middleware-name>
使用你的中间件名称替换<middleware-name>。创建可以看到中间件在 app/http/middleware 目录。
php artisan make:middleware agemiddleware
第3步 − agemiddlware 会在 app/http/middleware 文件中创建。新创建的文件将自动创建下面代码:
<?php namespace app\http\middleware; use closure; class agemiddleware { public function handle($request, closure $next) { return $next($request); } }
全局中间件将在应用程序的每个http请求运行,而路由中间件将被分配到一个特定的路由。中间件可在 app/http/kernel.php 注册.
该文件包含两个属性: $middleware 和 $routemiddleware。$middleware 属性用于注册全局中间件,$routemiddleware属性用于注册路由指定中间件。
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, ];
我们已经在前面的例子中已创建 agemiddleware 中间件。 现在,我们可以在具体的路由中间件属性登记。注册代码如下所示。
<?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 参数之后,自定义参数。
public function handle($request, closure $next) { return $next($request); }
php artisan make:middleware rolemiddleware
第3步 − 添加以下代码到新创建的角色中间件的处理方法 - 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 中间件。
php artisan make:controller testcontroller
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."; } }
app/http/routes.php
route::get('role',[ 'middleware' => 'role:editor', 'uses' => 'testcontroller@index', ]);
响应已经发送给浏览器后可终止中间件执行一些任务。这可以通过使用创建中间件“终止”方法的中间件来实现。可终止中间件会注册全局中间件。该终止方法将接受两个参数:$request 和 $response。终止方法可以被创建,如在下面显示的代码。
php artisan make:middleware terminatemiddleware
第3步 - 复制下面的代码到新创建文件 - 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."; } }
第4步 − 注册 terminatemiddleware 到 app\http\kernel.php 文件中.
加了灰色突出的线条的是该文件中注册的 terminatemiddleware 中间件。
php artisan make:controller abccontroller
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."; } }
app/http/routes.php
route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'abccontroller@index', ]);
http://localhost:8000/terminate