Home > PHP Framework > ThinkPHP > thinkphp hook implementation method

thinkphp hook implementation method

Release: 2020-04-20 09:09:39
forward
3079 people have browsed it

A hook is a trigger mechanism, like a trap. When the program runs to a certain place, the trap will be triggered, and then the Hook will be executed. After the execution is completed, the system will continue based on the different results of the execution.

thinkphp hook implementation method

The framework calls the import method in the Hook class in the \Think\Think->start() method. Batch loading mode behavior: The default is \Model\common.php Configuration file, which defines behavior extensions.

thinkphp hook implementation method

2. Monitor the behavior of tag tags through the Hook:listen() method. An array tags:tag is defined in the Hook class as key; Behavior is value. Execute the marked behavior plug-in through Hook:exec().

 /**
     * 监听标签的插件
     * @param string $tag 标签名称
     * @param mixed $params 传入参数
     * @return void
     */
    static public function listen($tag, &$params=NULL) {
        if(isset(self::$tags[$tag])) {
            if(APP_DEBUG) {
                G($tag.'Start');
                trace('[ '.$tag.' ] --START--','','INFO');
            }
            foreach (self::$tags[$tag] as $name) {
                APP_DEBUG && G($name.'_start');
                $result =   self::exec($name, $tag,$params);
                if(APP_DEBUG){
                    G($name.'_end');
                    trace('Run '.$name.' [ RunTime:'.G($name.'_start',$name.'_end',6).'s ]','','INFO');
                }
                if(false === $result) {
                    // 如果返回false 则中断插件执行
                    return ;
                }
            }
            if(APP_DEBUG) { // 记录行为的执行日志
                trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');
            }
        }
        return;
    }

    /**
     * 执行某个插件
     * @param string $name 插件名称
     * @param string $tag 方法名(标签名)     
     * @param Mixed $params 传入的参数
     * @return void
     */
    static public function exec($name, $tag,&$params=NULL) {
            if('Behavior' == substr($name,-8) ){
            // 行为扩展必须用run入口方法
            $tag    =   'run';
        }
        $addon   = new $name();
        return $addon->$tag($params);
    }
Copy after login

Recommended tutorial: thinkphp tutorial

The above is the detailed content of thinkphp hook implementation method. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:csdn.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template