关于路由中间件,我们在此将采用实例来说明。前面讲到的中间件,更多的是基于全局性的中间件,如果我们想对单个的文件进行局部的判断与权限的设定,在此可以采用局部中间件的形式。
1、路由中间件
第一种:直接在路由定义文件中,引入路由中间件
注销掉App\middleware.php文件中的全局中间件
App\middleware.php
在Address.php控制器文件中,定义一个Read( )方法,接受一个$id参数,并返回其id值,如下图:
在route\app.php文件中,定义read()方法的路由,如下图:
在前/后置中间件中,我们定义了一个Check.php中间件文件,在此我们将其复制一份,并修改其文件名,改为Auth.php,如下图:
Auth.php中间件定义文件
在此我们给request请求的参数id定义一个值,如果id==10,则打印出“管理员”,并返回request请求,如果id!=10,则仅返回request请求。
输出结果:
第二种:引入写法
对于路由中间件,还有这种写法,其中Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,如下图:
访问如下:
第三种:同时定义多个中间件文件
其中Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,如下图:
输出结果:
第四种:给路由中间件配置别名
Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及中间件配置config\middleware.php文件.如下图:
config\middleware.php
由于在config\middleware.php文件中给定了中间件的定义路径,route\app.php文件的内容如下:
输出结果:
2、给中间件传递额外参数
Address.php 、 config\middleware.php 、 Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及Auth.php文件.如下图:
route\app.php路由定义文件
在路由中间件的定义文件中,我们在其末尾传递一个参数,如下图:
Auth.php
在中间件的入口文件handle()方法中,我们传递一个额外的param参数,同时在if判断句的过程中,我们将其接收。如下图:
输出结果:
3、闭包路由
Address.php 、 config\middleware.php 、 Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及Auth.php文件.
由于前面的中间件都是定义在相对应的中间件入口文件handle()方法中,而闭包路由则是直接将handle()方法中的参数,直接复制进闭包函数中,如下图:
Auth.php中间件文件
route\app.php路由定义文件
输出结果: