发布于 2015-10-30 15:14:33 | 163 次阅读 | 评论: 0 | 来源: 网络整理
CodeIgniter 的钩子功能,让你可以在不改变系统核心文件的基础上,改变或增加系统的核心运行功能。当 CodeIgniter 运行后,它会产生一个特殊的进程,这个进程在项目文件里有说明。当然,您可以自定义一些动作来替代程序运行过程中的某些阶段。例如,你可以在控制器加载前运行一段脚本,或者在加载后运行,或者你想在其他地方触发脚本。
通过设定 application/config/config.php 文件里的选项,钩子功能可以在全局范围内打开或者关闭:
$config['enable_hooks'] = TRUE;
钩子定义在 application/config/hooks.php 里。每个钩子可以用下面格式的数组来定义:
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
说明:
数组的索引与你要用的钩子名相关。上述的例子中,挂钩点是 pre_controller
。挂钩点参数列表如下所示,以下各项将定义在你相关联的钩子数组里:
如果你用的是 PHP 5.3+, 你也能使用 lambda/anoymous 函数 (或闭包(closures)) 作为钩子:
$hook['post_controller'] = function()
{
/* do something here */
};
如果你在多个脚本中用同一个钩子,最简单的方法就是把你的数组定位成二维的,比如:
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'MyMethod',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
$hook['pre_controller'][] = array(
'class' => 'MyOtherClass',
'function' => 'MyOtherMethod',
'filename' => 'Myotherclass.php',
'filepath' => 'hooks',
'params' => array('red', 'yellow', 'blue')
);
注意每个数组后的中括号:
$hook['pre_controller'][]
这样你就可以在多个脚本中使用同一个钩子。你定义的数组顺序就是程序的执行顺序。
以下是可用的挂钩点:
_display()
方法,在系统执行的最后发送页面给浏览器。允许你使用自己的显示方法。注意,你需要使用 $this->CI =& get_instance()
引用 CI 的 superobject,然后最终数据可以通过调用 $this->CI->output->get_output()
获得。_display_cache()
函数。这可以让你使用自己的缓存显示机制。