• 技术文章 >php框架 >ThinkPHP

    说一说ThinkPHP6中五花八门的中间件

    王雪芹王雪芹2020-05-06 17:44:07原创1126
    在ThinkPHP6中新增中间件功能,而且中间件又分很多类型的中间件,很多新手对ThinkPHP6中间件很犯难,下面就给大家分别介绍下。

    全局中间件:

    我们下载好ThinkPHP6的框架后,在app目录下就有一个middleware.php,我们在app目录下定义的中间件叫做全局中间件,全局中间件是对所有应用都生效的中间件。

    应用中间件:

    那换而言之,如果我们再复制一份middleware.php放在了某个应用下,比如index应用,是不是就叫做应用中间件呢,答案是对的。

    控制器中间件:

    如果在控制器中操作中间件,是不是就叫做控制器中间件?

    路由中间件:

    那可不可以在路由中也定义中间件,比如我只想让某个请求使用某个中间件,其他的并不想使用中间件,那也就有了路由中间件。

    如果同一个请求,所有类型的中间件都定义了,那执行顺序是如何呢?

    全局中间件->应用中间件->路由中间件->控制器中间件

    接下来我们看一个实例。

    全局中间件:

     public function handle($request, \Closure $next)
        {
            echo 'app全局中间件';
            return $next($request);
        }

    应用中间件:

    public function handle($request, \Closure $next)
        {
            echo '应用中间件';
            return $next($request);
        }

    路由中间件:

    Route::rule('hello','index/hello')
    ->middleware(\app\middleware\Auth::class);

    控制器中间件:

    在使用控制器中间件之前,我们先定义好别名,在根目录下config\middleware.php中定义别名。这个别名其实就是增加别名标识。别名定义好后,不仅在控制器中间件可以使用,路由中间件也可以使用。

    return [
        'alias' => [
            'auth1' => app\middleware\Auth1::class,
        ],
    ];

    我们在这里定义别名中间件,就不需要在middleware.php中声明了,而是通过在控制中使用别名定义:

    class Index
    {
        protected $middleware = ['auth1'];
        public function index()
        {
           return 'index';
        }
        public function hello()
        {
           echo 'hello方法';
        }
    }

    这个时候我们访问hello方法,输出结果是:

    app全局中间件

    应用中间件

    路由中间件

    控制器中间件

    hello方法

    以上就是ThinkPHP6各种中间件的介绍,其实各种中间件并不难理解,主要在于它们之间的执行顺序需要大家明确。

    以上就是说一说ThinkPHP6中五花八门的中间件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:ThinkPHP6
    上一篇:ThinkPHP6的前置中间件和后置中间件有哪些区别? 下一篇:thinkphp配置配置多应用多配置的方法
    大前端线上培训班

    相关文章推荐

    • ThinkPHP6带搜索条件的分页解决方案• 封装ThinkPHP6.0通用文件上传• 从一个简单的小例子入门ThinkPHP6的中间件• ThinkPHP6的前置中间件和后置中间件有哪些区别?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网