目录 搜索
欢迎 目录 快速参考图 基本信息 服务器要求 许可协议 变更记录 关于CodeIgniter 安装 下载 CodeIgniter 安装指导 从老版本升级 疑难解答 介绍 开始 CodeIgniter 是什么? CodeIgniter 速记表 支持特性 应用程序流程图 模型-视图-控制器 架构目标 教程 内容提要 加载静态内容 创建新闻条目 读取新闻条目 结束语 常规主题 CodeIgniter URL 控制器 保留字 视图 模型 辅助函数 使用 CodeIgniter 类库 创建你自己的类库 使用 CodeIgniter 适配器 创建适配器 创建核心系统类 钩子 - 扩展框架的核心 自动装载资源 公共函数 URI 路由 错误处理 缓存 调试应用程序 以CLI方式运行 管理应用程序 处理多环境 PHP替代语法 安全 开发规范 类库参考 基准测试类 日历类 购物车类 配置类 Email 类 加密类 文件上传类 表单验证详解 FTP 类 图像处理类 输入类 Javascript 类 语言类 装载类 迁移类 输出类 分页类 模板解析器类 安全类 Session 类 HTML 表格类 引用通告类 排版类 单元测试类 URI 类 User-Agent 类 表单验证 XML-RPC 和 XML-RPC 服务器 Zip 编码类 缓存适配器 适配器参考 适配器 数据库类 Active Record 类 数据库缓存类 自定义函数调用 数据库配置 连接你的数据库 数据库快速入门例子代码 字段数据 数据库维护类 查询辅助函数 数据库类 查询 生成查询记录集 表数据 事务 数据库工具类 JavaScript类 辅助函数参考 数组辅助函数 CAPTCHA 辅助函数 Cookie Helper 日期辅助函数 目录辅助函数 下载辅助函数 Email 辅助函数 文件辅助函数 表单辅助函数 HTML辅助函数 Inflector 辅助函数 语言辅助函数 数字辅助函数 路径辅助函数 安全辅助函数 表情辅助函数 字符串辅助函数 文本辅助函数 排版辅助函数 URL 辅助函数 XML 辅助函数
文字

CodeIgniter 用户指南 版本 2.1.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. 挂钩点参数列表如下所示. 以下各项将定义在你的相关钩子数组里:

  • class  你希望调用的类名.如果你更喜欢使用过程函数代替类的话,此项保留为空.
  • function  你希望调用的函数名.
  • filename  包含有你的类/函数的文件名.
  • filepath  包含你的脚本的目录名. 注意: 你的脚本放在 application 文件夹下的目录里, 这样 filepath就以那个文件夹(application)为基准. 例如, 如果你的脚本放在application/hooks下, 你可以把hooks 作为你的filepath. 如果你的脚本放在application/hooks/utilities下你可以把 hooks/utilities作为filepath. 注意后面没有"/".如果不放在根目录下可以根据相对路径的配置,来完成调用。这样就可以完成,多个应用共享一个钩子。
  • params  你希望传递给脚本的任何参数. 此项是可选的.

同一挂钩点的多次引用

如果你想在同一个挂钩点引用多个脚本,最简单的方式就是把你的数组定义成二维的,像这样:

$hook['pre_controller'][] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('beer', 'wine', 'snacks')
                                );

$hook['pre_controller'][] = array(
                                'class'    => 'MyOtherClass',
                                'function' => 'MyOtherfunction',
                                'filename' => 'Myotherclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('red', 'yellow', 'blue')
                                );

注意在每个数组索引后面的中括号:

$hook['pre_controller'][]

这允许你的多个脚本拥有相同的挂钩点。你定义数组的顺序将是程序执行的顺序.

挂勾点

以下是一组可用的挂钩点.

  • pre_system
    系统执行的早期调用.仅仅在benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它的过程.
  • pre_controller
    在调用你的任何控制器之前调用.此时所用的基础类,路由选择和安全性检查都已完成.
  • post_controller_constructor
    在你的控制器实例化之后,任何方法调用之前调用.
  • post_controller
    在你的控制器完全运行之后调用.
  • display_override
    覆盖_display()函数, 用来在系统执行末尾向web浏览器发送最终页面.这允许你用自己的方法来显示.注意,你需要通过 $this->CI =& get_instance() 引用 CI 超级对象,然后这样的最终数据可以通过调用 $this->CI->output->get_output() 来获得。
  • cache_override
    可以让你调用自己的函数来取代output类中的_display_cache() 函数.这可以让你使用自己的缓存显示方法
  • post_system
    在最终着色页面发送到浏览器之后,浏览器接收完最终数据的系统执行末尾调用

 

翻译贡献者: anbutu, chouqiuqiu, elviscai, Hex, Jack, nardo, qixingyue, shishirui
最后修改: 2011-06-16 18:26:42
上一篇: 下一篇: