thinkphp 行为Hook 使用说明

hykeda8年前ThinkPHP1092

关于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注册了多个行为的话,会按照顺序执行。


相关文章

thinkphp6 中间件使用笔记

最近开发三频道打通程序时用到了中间件,现总结一下:第一步:首先用命令行生成中间件php think make:middleware Check这个指令会 app...

thinkphp5 导入第三方类库和导入扩展类库细节

在用到tp5之后,很多东西都不太一样了。在此记录些小经验: 类库的导入,tp5有两种类库,分别为第三方类库和扩展类库 导入扩展类库,tp的手册中有示例代码: extend目录下面...

thinkphp6 安装扩展jump后如何配置

thinkphp6 安装扩展jump后如何配置

config中jump.php配置跳转提示页面...

Thinkphp6 中上传文件,验证文件大小及后缀名官方文档错误修改

Thinkphp6 中上传文件,验证文件大小及后缀名官方文档错误修改

官方文档示例:上传验证支持使用验证类对上传文件的验证,包括文件大小、文件类型和后缀:public function upload(){    // 获取表单上传文件 &nb...

Thinkphp6中在构造函数中返回json数据

return json($arr)->send();如果直接在构造函数中使用return json()是不会返回json格式的数据的。必须调用send方法。...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。