非常教程

Codeigniter 3参考手册

用户指南 | User guide: General

钩子 - 扩展框架核心 | Hooks - Extending the Framework Core

CodeIgniter的Hooks特性提供了一种方法,可以在不侵入核心文件的情况下访问和修改框架的内部工作。当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。下面是一个钩点列表。以下项目应在您的关联挂钩数组中定义:

  • class您希望调用的的名称。如果您更喜欢使用程序功能而不是班级,请将此项留空。
  • 函数您希望调用的函数(或方法)名称。
  • 文件名包含类/函数的文件名。
  • 文件路径包含脚本的目录的名称。注意:您的脚本必须位于应用程序/目录内的目录中,因此文件路径与该目录相关。例如,如果脚本位于application / hooks /中,则只需使用“钩子”作为文件路径。如果你的脚本位于application / hooks / utilities /你将使用'hooks / utilities'作为你的文件路径。没有结尾的斜线。
  • PARAMS你希望传递给脚本的任何参数。此项目是可选的。

您也可以使用lambda / anoymous函数(或闭包)作为钩子,使用更简单的语法:

$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'][]

这允许您使用多个脚本具有相同的挂钩点。定义数组的顺序是执行顺序。

钩点

下面是可用挂钩点的列表。

  • pre_system在系统执行期间调用非常早。目前只有基准和钩子类已经加载。没有路由或其他进程发生。
  • pre_controller在调用任何控制器之前立即调用。所有基类,路由和安全检查都已完成。
  • post_controller_constructor在您的控制器实例化之后,但在发生任何方法调用之前立即调用。
  • post_controller控制器完全执行后立即调用。
  • display_override覆盖_display()方法,用于在系统执行结束时将最终页面发送到Web浏览器。这允许您使用您自己的显示方法。请注意,您需要引用CI超级对象,$this->CI =& get_instance()然后通过调用才能获得最终数据$this->CI->output->get_output()
  • cache_override允许您调用自己的方法,而不是_display_cache()输出库中的方法。这允许你使用你自己的缓存显示机制。
  • post_system在最终呈现页面发送到浏览器之后调用,在最终数据发送到浏览器之后在系统执行结束时调用。
Codeigniter 3

CodeIgniter 是一个PHP MVC框架,特点是超轻量级、有数据加密、有灵活URI路由等。对于 PHP 程序员来说,它小巧但功能强大。

主页 https://codeigniter.com/
源码 https://github.com/bcit-ci/CodeIgniter
版本 3
发布版本 3.1.5