11.拦截器

拦截器

接口

interface InterceptorInterface{
    /**
     * 预处理,前置处理
     * 
     * # 返回false,则该请求将终止
     * 可以在该方法内显示拒绝的信息,否则页面是空白的
     * 
     * @return boolean true/false
     */
    public function preHandle();
    /**
     * 后处理
     */
    public function postHandle();
    /**
     * 完成后处理
     */
    public function afterCompletion();
}

使用方法

组件配置

//拦截器
'interceptors'=>
[
    //直接设置拦截器类名字符串
    'qing\tips\ModelsBuilderInterceptor',
    'qing\tips\TablesBuilderInterceptor',
    'qing\forms\FilterBuilderInterceptor',
    'qing\forms\ValidatorBuilderInterceptor'
    //组件式配置
    'static'=>
    [
        'class'=>'\qing\webstatic\StaticInterceptor',
        'debug'=>false,
        'format'=>false
    ]
],

执行优先级

执行时机

参考:\qing\app\WebApp

拦截器执行链如下

应用初始化->preHandle->路由解析->控制器执行->postHandle->视图渲染/输出->afterCompletion->应用结束
  1. preHandle 前置处理 : 应用初始化后,路由解析前
  1. postHandle 后处理 : 控制器执行后,视图渲染前

  2. afterCompletion 完成后处理 : 视图输出后,应用结束前

应用场景

辅助开发

更多的内置拦截器

//拦截器
'interceptors'=>
[
    //提示文件生成器
    'tips'=>
    [
        'class'=>'\qing\tips\TipsBuilderInterceptor',
        'coms' =>false,
        'classes'=>
        [
            ['\qing\db\BaseModel','']
        ],
        'dirs'=>[[__DIR__.'/../model','\main\model']]
    ],
    //静态文件格式化器
    'static'=>
    [
        'class'=>'\qing\webstatic\StaticInterceptor',
        'debug'=>false,
        'format'=>false
    ],
    //数据库备份
    'db.backup'=>
    [
        'class'=>'qing\dbx\DbBackupInterceptor',
        'dataOn'=>true,
        'databaseAll'=>false,
        'limitRows'=>20
    ],
    //模型类生成器
    'qing\tips\ModelsBuilderInterceptor',
    'qing\tips\TablesBuilderInterceptor',
    //表单过滤器/验证器模版生成器
    'qing\forms\FilterBuilderInterceptor',
    'qing\forms\ValidatorBuilderInterceptor'
],