Kohana的Events和Hooks研究
来源:互联网 发布:landscan数据如何下载 编辑:程序博客网 时间:2024/06/14 15:35
转自:http://www.tsingfeng.com/?p=288
Kohana 是一个使用PHP5的面向对象的MVC框架,是从CodeIgniter衍生出来,研究了几天,感觉还不错,就是它的文档实在太简陋了,在看到它的 Events机制和Hooks机制时,确实有点不明白,文档上说的实在太简单了,后来我在Google上搜索了一下,找到两篇文章《Events and hooks in Kohana》和《Practical Kohana Hooks example: PHPIDS》,上面讲了一下Kohana的Events和Hooks,并举了例子,我也开始慢慢理解了它的含义。
在Kohana的Events中,默认定义了很多的Events(例如system.ready、system.pre_controller等 等),中文理解就是事件,也就是触发点,在程序在运行到某个位置时,会被触发,具体就是调用Event::run方法,我们在Kohana.php里可以 看到在不同的位置执行了不同的Event::run方法,那么Hooks的意义在于当一个事件被触发之前,可以通过已加载的Hooks来修改事件的回调, 有点绕口,说白了就是在事件发生之前,做点事情,举个例子,你安排了今天的日程,下午3点要开会,那么在3点开会就是一个Event(事件),那么到3点 的时刻,你希望提醒你一下,你在你的手机里定了一个闹钟,在3点的时候会响,这就是一个Hook,可以看出Hook是基于Event的。
我们可以创建自己的Hook程序,并加载如默认的Events里,但是默认的Events不一定能满足我们的需要,比如我们在Web应用中经常使用 的权限校验,判断这个用户是否登陆过,我们虽然可以使用默认Events里的system.pre_controller,但是这个Event是针对所有 的Controller的,有些Controller是不需要校验用户的,还好Kohana允许自己定义Event,下面我们还是举例说明吧。
要使用Hooks,首先要在application/config/config.php里将$config['enable_hooks']置为TRUE。
之后我们定义自己的Event,我们在application/controllers目录下建立base.php,代码如下:
- class Base_Controller extends Controller {
- public function __construct() {
- parent::__construct();
- Event::run("base.construct");
- }
- }
我们继承了Kohana的Controller,在构造函数里定义了Event,名字叫“base.construct”,以后我们的Controller都继承自Base_Controller,那么在对象创建的时候都会触发base.construct事件。
Hook的文件放在application/hooks下,我们就创建一个hook文件sessioncheck.php,代码如下:
- class SessionCheck {
- public function check() {
- echo "check session ...";
- }
- }
- Event::add('base.construct', array('SessionCheck','check'));
我们将SessionCheck的check方法加载到了base.construct事件上,也就是在触发base.construct事件之前,会执行SessionCheck的check方法。
接下来我们写一个Controller,在application/controllers目录下建立first.php,代码如下:
- class First_Controller extends Base_Controller {
- public function index() {
- echo "First - index";
- exit();
- }
- }
我们执行一下看看会有什么提示,http://localhost/kohana/first,显示
check session …First – index
没问题了,在Controller构造时,执行了Hook里的方法。
- Kohana的Events和Hooks研究
- Kohana的Events和Hooks研究
- stash的hooks和api
- Shell Events (a.k.a. Shell Hooks)
- Delegates 和Events的应用
- kohana(3.2)和gleez(1.1.5)的安装
- Kohana的Cache
- Kohana的数据库配置
- kohana nginx的配置
- Kohana框架的特性
- kohana
- subversion强制写log的windows 和linux hooks脚本
- git服务器的搭建和自动化部署(hooks)
- Kohana ORM 基本知识和操作
- HOOKS的详细介绍!
- svn的hooks使用
- C#的委托(Delegate)和事件(Events)
- Zabbix的events表和event API
- Ubuntu设置自动连接无线网络
- flex4+servlet 实现文件上传功能
- 进阶:使用浮点数和小数中的技巧和陷阱
- Java 中Iterator 、Vector、ArrayList、List 使用深入
- SEO学习笔记
- Kohana的Events和Hooks研究
- c#的修饰符用法
- jquery做的表格分页功能
- C# 多线程控制控件实例(例程简单,注释详细)
- 背包问题的解法源代码
- 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
- 电子时钟
- oracle存储过程编译死掉的原因及解决(转)
- socket异步编程