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. CentOS 7 环境配置

    1. 代理设置 http://blog.csdn.net/fwj380891124/article/details/42168683 2. xfce 桌面安装 http://blog.csdn.net ...

  2. CI模板加载css和js

    1.需求 ci无法加载css和js文件. 2.解决 删除..htaccess文件. 在config目录下配置base_url,并传给页面 $base_url = $this->config-&g ...

  3. java关键包简易说明

    java.lang 语言核心类,系统自动导入. java.util   java工具类.集合框架.时间,日历等. java.net   网络编程接口和类. java.io 流的接口和类 java.te ...

  4. java模拟post请求发送json

    java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...

  5. Eclipse设置黑色主题

    1点击help--->install new software 2输入 http://eclipse-color-theme.github.com/update 3下载安装eclipse col ...

  6. android 移动网络实时抓包

    2G.3G环境,那就必须root进去tcpdump 方式抓. 准备: 一.root CF-auto-root: http://autoroot.chainfire.eu/ 需要清理全部数据,注意备份 ...

  7. linux下编译时,链接math库

    在gcc下用到数学函数,如sqrt.在gcc时要加上 -lm 参数,这样告诉编译器我要用到数学函数了 . 如:gcc a.c -o a -lm 当在用Eclipse编译使用数学函数的C语言程序时,如s ...

  8. 学习CSS 笔记

    1.动态修改div的大小 Html: <div> Hello </div> css: div { resize:both; overflow:auto; } 2. box-si ...

  9. 网页端打开手机上的app

    iOS/Android 浏览器(h5)及微信中唤起本地APP 在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这 ...

  10. iOS之开发小技巧

    1.xcode如何添加快捷代码 xcode添加快捷代码 属性 2.cocoapods安装 cocoapods安装 3.iOS真机调试 真机调试 4.命令行自动打包 xcrun -sdk iphoneo ...