thinkphp 行为Hook 使用说明

ThinkPHP hykeda 1282℃ 0评论

关于tp的钩子功能,梳理下:

添加行为标签位:

tp默认在tags.php文件中已经添加了:

return [
    // 应用初始化
    'app_init'     => [],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],  
];

在tp中,典型的例子就是:App.class.php

static public function run() {
        // 应用初始化标签
        Hook::listen('app_init');
        App::init();
        // 应用开始标签
        Hook::listen('app_begin');
        // Session初始化
        if(!IS_CLI){
            session(C('SESSION_OPTIONS'));
        }
        // 记录应用初始化时间
        G('initTime');
        App::exec();
        // 应用结束标签
        Hook::listen('app_end');
        return ;
    }

注意:这些标签位在tp的框架中已经有监听了,如果你写在这个里面会在tp加载时和你监听的两个地方都执行到,会出现两次执行这样的问题,我就遇到了输出了两次的问题。但是用add动态添加的话不会出现。

手工在tags.php文件中加入自己的标签,比如:’test_abc’=>[‘app\\index\\behavior\\CheckAuth’],就是这个标签指向到这个定义行为的文件。

app\\index\\behavior\\CheckAuth 这个文件就是具体的行为的定义,需要执行什么逻辑都写在这里面,默认run方法,类似构造方法。

如果不是手工去tags.php中配置,那么就用Hook::add(‘test_abc’,‘app\\public_tmp\\behavior\\CheckAuth’);动态加载方式进行添加。

使用这个钩子:

Hook::listen(‘test_abc‘);就可以了。

如果test_abc注册了多个行为的话,会按照顺序执行。

转载请注明:雕木乱 » thinkphp 行为Hook 使用说明

喜欢 (1)

您必须 登录 才能发表评论!