标签:
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表达式(匿名函数或闭包)作为钩子, 这样语法更简单:
$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‘][]
这可以让你在同一个挂钩点处执行多个脚本,多个脚本执行顺序就是你定义数组的顺序。
以下是所有可用挂钩点的一份列表:
标签:
原文地址:http://www.cnblogs.com/php-linux/p/5221076.html