tp6的中间键

php think make:middleware Test

1.通过php think 内置命令生成一个中间键,这个指令会 app/middleware目录下面生成一个Test中间件。

<?php
declare (strict_types = 1);

namespace app\middleware;

class Test
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        echo "I'm a Test middleware ";

        return $next($request);
    }
}

1.中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包。

2.中间件handle方法的返回值必须是一个Response对象。

// 中间件配置
return [
    // 别名或分组
    'alias'    => [
        'test' => [\app\middleware\Test::class],
    ],
    // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
    'priority' => [],
];

1.config/middleware.php配置文件中可以定义中间件别名,设置中间件运行顺序

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    \app\middleware\Test::class,
];

1.app/middleware.php 文件中定义应用级别的中间件设置

protected $middleware = ["test"];

1.在控制器中,通过成员变量定义中间件,对当前控制器生效

Route::rule('hello/:name','hello')
    ->middleware([\app\middleware\Auth::class, \app\middleware\Check::class]);

 

思考

  1.中间键的执行顺序是全局中间件->应用中间件->路由中间件->控制器中间件

  2.配置文件中可以定义中间件的别名和设置执行顺序

  3.多个中间键通过数组的方式注册,如果需要传参数也可以通过数组的方式

  4.路由中间件是对应某个路由请求

  5.如果在应用和控制器中都注册了中间件,中间件会处理多次

  

posted @ 2021-05-20 14:39  skyhxm  阅读(245)  评论(0)    收藏  举报