Ci框架中Hooks可以理解:在框架的执行流程过程中,允许开发者在固定的某些时间点上(如:调用控制器前,调用控制器后等时间点上),调用其他函数来扩充CI框架执行流程的一种方法。技术上来就是通过配置文件,调用其他函数执行;
 
1、CI框架Hooks使用:
    1.1、修改application/config/config.php文件,enable_hooks默认为FLASE,改成TRUE
    1.2、配置钩子调用相关信息,配置文件在application/config/hooks.php;需要在改文件定义个hook(不是hooks数组,别写错了)数组的hooks配置信息;一个加载点可以加载多个执行函数,改成如下:
其中,class为类名,function为调用函数名,filename为文件名,filepath为文件路径,params为参数;
    1.3、定义相应hooks调用的类文件,一般是存放在application/hooks/文件夹下面,写法就像一般类一样,主要类名和方法名要与hooks数组信息对应就像,如下:
    通过上述配置,系统就会调用相应的hooks;
 
2、hooks原理;
    在程序执行前,框架会加载Hooks,
    其中load_class函数会嫌判断Hooks类是否已经加载,如果没加载则初始化该类,Hooks构造函数如下:
,主要是判断config是否开启hooks,如果开启,则加载config/hoos.php配置文件、钩子配置信息;然后框架通过调用hooks->call方法调用hoosk,如下:
call_hook函数如下:
,hook类通过call_hook解析配置,通过hook类中run_hook调用函数,run_hook函数如下:
 
 
Hooks运行原理完毕。
 
通过上面run_hooks代码,可以知道配置hooks有如下四种方式:
$hook['pre_system'][] = function(){}
$hook['pre_system'][] = array($object,function1)
$hook['pre_system'][] = array('class','function','filename','filepath','params')
$hook['pre_system'][] = array('function','filename','filepath','params')
 
但是有点一个疑惑,$_in_progress变量的作用,为什么会出现死循环呢?
 

CI框架之HOOKS使用流程及原理的更多相关文章

  1. CI框架源码学习笔记2——Common.php

    上一节我们最后说到了CodeIgniter.php,可是这一节的标题是Common.php,有的朋友可能会觉得很奇怪.事实上,CodeIgniter.php其实包含了ci框架启动的整个流程. 里面引入 ...

  2. CI框架源码学习笔记5——Hooks.php

    接着Benchmark.php往下看,下一个引入的文件是Hooks.php,我们称之为钩子.它的目的是在不改变核心文件的基础上,来修改框架的内部运作流程.具体使用方法参见手册http://codeig ...

  3. CI框架 -- 核心文件 之 Hooks.php

    钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...

  4. CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

    最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时 ...

  5. Struts框架核心工作流程与原理

    1.Struts2架构图  这是Struts2官方站点提供的Struts 2 的整体结构.  执行流程图 2.Struts2部分类介绍  这部分从Struts2参考文档中翻译就可以了. ActionM ...

  6. CI框架的引导流程以及基准测试类

    一[CI]框架的引导流程了解一下,并掌握如何新增自己的扩展类库   http://www.cnblogs.com/ohmygirl/p/CIRead-4.html // CI框架源码阅读笔记4 引导文 ...

  7. 《CI/CD 流程以及原理说明》

    自动化部署 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在 ...

  8. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  9. PHP的CI框架流程基本熟悉

    CI框架是PHP的一个快速开发框架,我是目前的公司项目后台语言用的PHP,因为我做前端开发,需要用php去填充页面数据,所以就开始去了解这个框架,学习了一些php和数据库的东西,这篇文章先具体介绍CI ...

随机推荐

  1. php检测文件内容编码的方法

    核心用到的是mb_convert_encoding函数,示例代码如下: <?php header("Content-type: text/html; charset=utf-8&quo ...

  2. setprecision **fixed

    #include <iostream> #include <iomanip> using namespace std; int main( void ) { const dou ...

  3. JSON中eval与parse的区别

    json的的解析方法 (非原创) json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下: var jsonData = '{"data1":&q ...

  4. PHP 查看安装信息

    1.运行PHP脚本,查看phpinfo函数的输出. 2.在系统环境变量Path中配好php.exe可执行文件的路径,命令管理器CMD中,执行`php.exe -i`查看. 3.在phpinfo()的输 ...

  5. Install PIL with Jpeg support on Raspbian Jessie

    参考: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=79379 在 树莓派(Raspbian Jessie) 上安装djan ...

  6. JqueryUI Dialog 加载动态页 部分页

    问题:使用JqueryUIDialog 加载部分页,可以弹出对话框,但是在操作页面上的按钮是提示"dialog"找不到,思路是,先取到部分页加载到要dialog的Div上,在dia ...

  7. 在Ubuntu 14.04安装和使用Docker

    Docker是一个开源软件,它可以把一个Linux应用和它所依赖的一切(比如配置文件)都封装到一个容器.然而,Docker与虚拟机不同,它使用了沙箱机制,Docker容器不运行操作系统,它共享主机上的 ...

  8. html中嵌入swf文件的几种方法

    转自:http://blog.163.com/yuki_1154/blog/static/7120277120126109315935/ 找了很久终于找到一个比较全面的: 1. object + em ...

  9. monkey之三:monkey测试测略(摘抄)

    一.分类 Monkey测试针对不同的对象,不同的目的,采用不同的测略方案. 测试类型分为: 应用程序的稳定性测试和压力测试 测试对象分为: 单个APK和多个APK集合 测试目的分为: 解决问题的测试( ...

  10. 双日历时间段选择控件—daterangepicker(汉化版)

    daterangepicker的配置信息,记录下来方便设置: <pre name="code" class="html"><pre name= ...