这些ZF事件以什么顺序运行?

时间:2011-03-29 07:25:22

标签: php zend-framework

这是一个Zend Framework问题。

如果我有一个控制器,一个动作助手和一个插件,他们的事件会发生什么顺序?下面我按照我认为发生的顺序列出了我感兴趣的事件。订单是否正确?

  1. 插件,routeStartup()
  2. 插件,routeShutdown()
  3. 插件,dispatchLoopStartup()
  4. 插件,preDispatch()

  5. Action Helper,init()

  6. Action Helper,preDispatch()

  7. Controller,init()

  8. Controller,preDispatch()
  9. Controller,postDispatch()

  10. Action Helper,postDispatch()

  11. 插件,postDispatch()

  12. 插件,dispatchLoopShutdown()
  13. 我想到,当涉及Action Helper和Controller时,init()方法对可以连续运行,然后是一对preDispatch()方法,但我不认为这是情况下。

    感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

有趣的问题。我认为你是对的,除了7和6应该相反。为了检查它,我调试了一个ZF应用程序。这是我发现的:

1.  $this->_plugins->routeStartup($this->_request);         #$this is Zend_Controller_Front

    $router->route($this->_request);                        #$router is Zend_Controller_Router_Rewrite, and method route finds a matching route to the current PATH_INFO

2.  $this->_plugins->routeShutdown($this->_request);        #$this is Zend_Controller_Front

3.  $this->_plugins->dispatchLoopStartup($this->_request);  #$this is Zend_Controller_Front

4.  $this->_plugins->preDispatch($this->_request);          #$this is Zend_Controller_Front

5.  $helper->init();    # exectued for helpers by Zend_Controller_Action_HelperBroker
                        # during making an instance of IndexController.
                        # Specifically for Zend_Controller_Action_Helper_ViewRenderer
                        # and Zend_Layout_Controller_Action_Helper_Layout


// IndexControlles has just been instantiated 


6.  $this->init();                        # $this is  IndexController

7.  $this->_helper->notifyPreDispatch();  # $this is  IndexController

8.  $this->preDispatch();                 # $this is  IndexController

    $this->$action();                     # $this is  IndexController (action executed)

9.  $this->postDispatch();                # $this is  IndexController

10. $this->_helper->notifyPostDispatch(); # $this is  IndexController


// Execution of IndexController has just finished


11. $this->_plugins->postDispatch($this->_request);  #$this is Zend_Controller_Front

12. $this->_plugins->dispatchLoopShutdown();         #$this is Zend_Controller_Front 


// after that response is sent

 $this->_response->sendResponse();                   #$this is Zend_Controller_Front

希望这有帮助。

答案 1 :(得分:2)

http://www.zietlow.net/zend-framework/zend-framework-ablauf-des-dispatch-prozesses/44/

有2个链接,其中有关于调度过程的好照片。