Maison >cadre php >PensezPHP >méthode d'implémentation du hook thinkphp

méthode d'implémentation du hook thinkphp

尚
avant
2020-04-20 09:09:393096parcourir

Hook est un mécanisme de déclenchement, comme un piège. Lorsque le programme s'exécute à un certain endroit, le piège sera déclenché, puis le Hook sera exécuté une fois l'exécution terminée, le système continuera en fonction des différents. résultats de l'exécution.

méthode d'implémentation du hook thinkphp

Le framework appelle la méthode d'importation dans la classe Hook dans la méthode ThinkThink->start() : la valeur par défaut est le fichier de configuration dans Modelcommon. php, quel fichier définit l'extension de comportement.

méthode dimplémentation du hook thinkphp

2. Surveillez le comportement de la balise via la méthode Hook:listen() Définissez un tableau de balises dans la classe Hook : la balise est. key ; le comportement de comportement est la valeur .Exécutez le plug-in de comportement marqué via 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);
    }

Tutoriel recommandé : tutoriel thinkphp

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer