### Interceptor :拦截器 可以配置多组拦截器对访问进行拦截,访问在真正到达控制器前会按顺序经过 Interceptor,可以做一些权限,用户身份识别等代码 配置 ~~~ 'interceptors'=>[ \cloud\CloudInterceptor::class, \cloud\mag\MagInterceptor::class, \cloud\security\SecurityInterceptor::class ], 'interceptors_except'=>['/log'] //需要排除的路径前缀 ~~~ 拦截器需要实现Interceptor接口 如 ~~~ class SecurityInterceptor implements Interceptor{ /** * @var CloudApi */ private $api; public function _initialize(CloudApi $api) { $this -> api = $api; } public function handler(Request $request, Response $response) { //注意: 如果拦截器 返回 true 说明拦截自己处理了请求,请求不会继续向下经过其他拦截器,更不会到达控制器,会直接返回 //默认空返回就可以 return false; } } ~~~ ### 通过代码添加拦截器 $application->addInterceptor(类名,优先级) ~~~ public function appInit(AutoFindHandlerMapping $autoMapping, Router $router) { /* @var $application Application */ $application = Ioc::get(Application::class); $application->addInterceptor(SecurityInterceptor::class,99); } ~~~ #### 关于优先级 配置文件中配置的优先级都是 100, 你可以通过代码加入拦截器并设置优先级 最后拦截器的执行顺序是按优先级排序的 越小的越先执行