CodeIgniter钩子机制详解 | AI生成和翻译

Home 2025.10

什么是 CodeIgniter 中的钩子?

CodeIgniter 中的钩子提供了一种无需修改框架核心文件即可扩展功能的方式。它们允许你在执行周期的特定节点(例如控制器加载前后、输出重写或缓存处理时)运行自定义代码。这种方式通过将你的代码与官方代码库分离,保持了框架的可升级性。

钩子在 application/config/hooks.php 中定义,并在 application/config/config.php 中通过设置 $config['enable_hooks'] = TRUE; 启用。

启用钩子

  1. 打开 application/config/config.php
  2. 设置配置变量:
    $config['enable_hooks'] = TRUE;
    

    这会使 CodeIgniter 检查并执行钩子文件

定义钩子

钩子在 application/config/hooks.php 中以数组形式配置。每个钩子数组需指定:

请将钩子类放置在 application/hooks/ 目录中

钩子触发点

CodeIgniter 提供以下预定义的钩子执行节点:

使用示例

假设需要在控制器运行前记录每个请求,可以创建针对 pre_controller 的钩子:

  1. 创建文件 application/hooks/my_hook.php
    <?php
    class My_hook {
        public function log_request() {
            // 示例:记录到文件或数据库
            log_message('info', 'Controller about to be called: ' . $this->uri->uri_string());
        }
    }
    
  2. application/config/hooks.php 中添加:
    $hook['pre_controller'] = array(
        'class' => 'My_hook',
        'function' => 'log_request',
        'filename' => 'my_hook.php',
        'filepath' => 'hooks', // 可选参数,默认为 application/hooks/
        'params' => array() // 可选参数
    );
    

现在每次控制器即将运行时,log_request 方法都会自动执行。

最佳实践


Back

x-ai/grok-code-fast-1

Donate