关于路由中间件,我们在此将采用实例来说明。前面讲到的中间件,更多的是基于全局性的中间件,如果我们想对单个的文件进行局部的判断与权限的设定,在此可以采用局部中间件的形式。

    1、路由中间件

    第一种:直接在路由定义文件中,引入路由中间件

    注销掉App\middleware.php文件中的全局中间件

    App\middleware.php
    image.png

    在Address.php控制器文件中,定义一个Read( )方法,接受一个$id参数,并返回其id值,如下图:
    image.png

    在route\app.php文件中,定义read()方法的路由,如下图:
    image.png

    在前/后置中间件中,我们定义了一个Check.php中间件文件,在此我们将其复制一份,并修改其文件名,改为Auth.php,如下图:

    Auth.php中间件定义文件
    image.png

    在此我们给request请求的参数id定义一个值,如果id==10,则打印出“管理员”,并返回request请求,如果id!=10,则仅返回request请求。

    输出结果:

    image.png

    image.png

    第二种:引入写法

    对于路由中间件,还有这种写法,其中Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,如下图:
    image.png
    访问如下:
    image.png
    第三种:同时定义多个中间件文件

    其中Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,如下图:
    image.png

    输出结果:
    image.png

    第四种:给路由中间件配置别名

    Address.php Auth.php Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及中间件配置config\middleware.php文件.如下图:

    config\middleware.php
    image.png

    由于在config\middleware.php文件中给定了中间件的定义路径,route\app.php文件的内容如下:
    image.png
    输出结果:
    image.png
    2、给中间件传递额外参数

    Address.php 、 config\middleware.php 、 Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及Auth.php文件.如下图:

    route\app.php路由定义文件

    在路由中间件的定义文件中,我们在其末尾传递一个参数,如下图:
    image.png

    Auth.php

    在中间件的入口文件handle()方法中,我们传递一个额外的param参数,同时在if判断句的过程中,我们将其接收。如下图:
    image.png

    输出结果:
    image.png

    3、闭包路由
    Address.php 、 config\middleware.php 、 Check.php文件不用改动,我们只修改route\app.php路由定义文件,以及Auth.php文件.

    由于前面的中间件都是定义在相对应的中间件入口文件handle()方法中,而闭包路由则是直接将handle()方法中的参数,直接复制进闭包函数中,如下图:

    Auth.php中间件文件
    image.png

    route\app.php路由定义文件
    image.png
    输出结果:
    image.png