thinkphp 行为Hook 使用说明

hykeda7年前ThinkPHP316

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


相关文章

phpqrcode防止输出乱码 thinkphp

/** * 封装生成二维码函数 * */ function getQrcode($url){ /*生成二维码*/ vendor("phpqrcod...

thinkphp项目接入阿里云OSS

1、首先安装 sdk:composer require aliyuncs/oss-sdk-php安装好后,在控制器中创建上传方法:protected function upload...

thinkphp6 中间件使用笔记

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

composer升级thinkphp版本

之前用的thinkphp版本为tp5.0.12,最近tp已经更新到5.0.19以及5.1版本的5.1.12。 我一开始在目录下面直接使用了composer update...

thinkphp5 报错级别设置,屏蔽警告

本着严谨的原则,5.0版本默认情况下会对任何错误(包括警告错误)抛出异常,如果不希望如此严谨的抛出异常,可以在应用公共函数文件中(common.php)或者配置文件中使用error_report...

Thinkphp5 创建模块

一、创建三个模块 Common(公共模块),Index(前台模块),Admin(后台模块)。 index.php实际配置 <?php // 定义应用目录 define('APP_...

发表评论    

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