yaf hook钩子

来源:互联网 发布:准星软件 编辑:程序博客网 时间:2024/06/05 14:11
Yaf中支持的6个Hook 

1、routerStartup 这个会在路由之前出发,也就是路由之前会调用这个Hook ,这个是7个事件中, 最早的一个. 但是一些全局自定的工作, 还是应该放在Bootstrap中去完成 

2、routerShutdown 这个在路由结束之后触发,需要注意的是,只有路由正确完成之后才会触发这个Hook 

3、dispatchLoopStartup 分发循环开始之前被触发 

4、preDispatch 分发之前触发,如果在一个请求处理过程中, 发生了forward, 则这个事件会被触发多次 

5、postDispatch 分发结束之后触发,此时动作已经执行结束, 视图也已经渲染完成. 和preDispatch类似, 此事件也可能触发多次 

6、dispatchLoopShutdown 分发循环结束之后触发 此时表示所有的业务逻辑都已经运行完成, 但是响应还没有发送 



注册插件 
 
插件要生效, 还需要向Yaf_Dispatcher注册, 那么一般的插件的注册都会放在Bootstra中进行. 一个注册插件的例子如下: 
[php] view plaincopy
<?php  
class Bootstrap extends Yaf_Bootstrap_Abstract{  
   
        public function _initPlugin(Yaf_Dispatcher $dispatcher) {  
            $user = new UserPlugin();  
            $dispatcher->registerPlugin($user);  
        }  
}  
 
 
插件目录 
 
一般的, 插件应该放置在APPLICATION_PATH下的plugins目录, 这样在自动加载的时候, 加载器通过类名, 发现这是个插件类, 就会在这个目录下查找.当然, 插件也可以放在任何你想防止的地方, 只要你能把这个类加载进来就可以 
 
这就是插件的使用过程,对于上面我们做一个总结,用代码来说话。 
 
首先我们定义好自己的插件类: 
[php] view plaincopy
/**  
* 插件类定义 
* UserPlugin.php 
*/  
class UserPlugin extends Yaf_Plugin_Abstract {   
    //在路由之前触发,这个是7个事件中, 最早的一个. 但是一些全局自定的工作, 还是应该放在Bootstrap中去完成   
    public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin routerStartup called <br/>\n";   
    }   
//路由结束之后触发,此时路由一定正确完成, 否则这个事件不会触发   
    public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin routerShutdown called <br/>\n";   
    }   
//分发循环开始之前被触发   
    public function dispatchLoopStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin DispatchLoopStartup called <br/>\n";   
    }   
//分发之前触发    如果在一个请求处理过程中, 发生了forward, 则这个事件会被触发多次   
    public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin PreDispatch called <br/>\n";   
    }   
//分发结束之后触发,此时动作已经执行结束, 视图也已经渲染完成. 和preDispatch类似, 此事件也可能触发多次   
    public function postDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin postDispatch called <br/>\n";   
    }   
  //分发循环结束之后触发,此时表示所有的业务逻辑都已经运行完成, 但是响应还没有发送   
    public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin DispatchLoopShutdown called <br/>\n";   
    }   
      
    public function preResponse(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {   
        echo "Plugin PreResponse called <br/>\n";   
    }   
}  
 
 
然后注册我们的插件,在上一节中我们讲到过Bootstrap的使用,这回我们要用上它了,就是在Bootstrap注册插件 
 
[php] view plaincopy
class Bootstrap extends Yaf_Bootstrap_Abstract{   
  /** 
   * 注册一个插件 
   * 插件的目录是在application_directory/plugins 
   */  
  public function _initPlugin(Yaf_Dispatcher $dispatcher) {   
    $user = new UserPlugin();   
    $dispatcher->registerPlugin($user);   
  }   
}  
 
 
就这样,插件就会在我们的项目运行过程中自动调用相关的Hook,我们可以在这些Hook中部署自己的业务逻辑,比如用户是否需要登录,权限判断等。

0 0
原创粉丝点击