魏长东

weichangdong

东邪

CI框架下hook的使用实例

最近在使用CI框架,看到框架/system/core/CodeIgniter.php代码好多地方出现类似这样的代码$EXT->_call_hook('pre_controller');但是又框架又看不到实际的代码,网上搜了下,原来这是所谓的钩子,我的理解是作者留下的口子,可以在这做些文章。

就拿这个代码$EXT->_call_hook('pre_controller');做例子吧。

首先需要在application/config/config.php开启这个支持,$config['enable_hooks'] = TRUE;设置成true就是开启。

然后在/application/config/hooks.php文件配置钩子到时候具体实施的对象。

$hook['pre_controller'] = array(
    'class'    => 'TestHook', //调用的类名
    'function' => 'test', //调用的函数名
    'filename' => 'TestHook.php', //文件名
    'filepath' => 'hooks', //文件或脚本路径,以application为基准
    'params'   => 'array()'//传递给脚本参数,可选
);

然后在application/hooks/TestHook.php下面的文件写上代码:

<?php
class TestHook{
    function test(){
        echo 'im hook test';
    }
}

这是执行结果:在执行实际的class和method的前面输出的。

ci-hook.png