thinkphp 行为Hook 使用说明

hykeda8年前ThinkPHP934

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


相关文章

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

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

ThinkPHP6 事件的简单应用

ThinkPHP6 事件的简单应用

一、序章ThinkPHP6的手册中关于【事件】章节的介绍都是直接文字说明,给出创建的类文件,并没有一个好的示例来进行补充说明。对于刚接触【事件】的同学在阅读理解上增加了一点点困难,本文就在此结合示例简...

thinkphp6 中间件使用笔记

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

composer安装插件包的时候提示PHP 版本不匹配

因为安装的 PHP 是 8.0 ,不匹配 composer.json 要求的版本,所以使用 composer 进行安装时会报错。在安装命令后加上 --ignore-pla...

关于thinkphp5.1钩子和行为的个人理解和使用

关于thinkphp5.1钩子和行为的个人理解和使用

thinkphp5中的钩子和行为属于AOP编程思想,类似于AOP编程中的“切面”的概念,简单理解就是一个切入点,可以大大增加程序的耦合性。如何使用钩子和行为来开发:首先在项目中创建一个行为文件夹:1、...

发表评论    

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