zend fremwork

入口文件(一般为index.php)
  设置include_path,把Zend的目录加载进来
  加载Zend_Loader
  设置一些基本路径(可选)
  Zend_Controller_Front::run('/path/to/controller');
  到Zend_Controller_Front::run
  1·实例化本身
  1.1 给插件$this->_plugins实例化类 Zend_Controller_Plugin_Broker
  1.2 开始分发$this->dispatch
  1.2.1 注册一个报错插件 Zend_Controller_Plugin_ErrorHandler
  1.2.2 注册控制器的视图插件 Zend_Controller_Action_Helper_ViewRenderer
  1.3 实例化request:Zend_Controller_Request_Http
  1.4 实例化response:Zend_Controller_Response_Http
  1.5 所有注册的插件设置request和response
  1.6 实例化路由Zend_Controller_Router_Rewrite
  1.7 实例化分发器Zend_Controller_Dispatcher_Standard,并且设置分发器的参数和设置response对象
  1.8 开始进入分发阶段
  1.9 插件开始routerStartup。
  1.10 路由开始路由$router->router;这里会设置根据用户的请求设置$resquest的moduleName和ControllerName和ActionName。
  1.11 插件执行routeShutdown
  1.12 插件执行分发开始dispatchLoopStartup
  1.13 插件执行分发前置preDispatch
  1.14 分发器开始分发 $dispatcher->dispatch($this->_request, $this->_response);
  1.14.1 设置$response对象和$request对象
  1.15.2 根据$request对象取得请求的ControllerName和$className
  1.15.3 实例化刚才取得的$className
   1.15.3.1 这里会执行控制器的request和response,设置控制器的_helper为 Zend_Controller_Action_HelperBroker,执行init()方法 ------------------------------------------------控制器断点
  1.15.4 根据$request对象取得请求的actionName
  1.15.5 控制器分发进入Zend_Controller_Action::dispatch($actionName);
  1.15.1 控制器的helper开始preDispatch()
  1.15.2 控制器preDispatch();------------------------------------------控制器断点
  1.15.3 执行控制器的请求的方法$controller->$actionName()---------------这里就是你主要的代码所在
  1.15.4 执行控制器的postDispatch();------------------------------控制器的断点
  1.15.5 控制器方法的PostDispatch(); //这里有个很重要的步骤,会加载View!
  1.15.5.1 执行控制器帮助ViewRenderer的postDispatch;
  1.15.5.2 执行ViewRenderer的render();//这里会把视图注册到response对象里面
  1.15.6 把控制器里面打印出来的东西加到response对象里面
  1.16 这里又回到Front
  1.17 所有插件执行分发结束,postDispatch();//Zend_Layout就是在这一步骤改了response对象的body中的内容。所以Zend_Layout是一个插件形式存在于ZF中
  1.18 如果是要返回response,那么就返回,否则直接response对象发送response内容:sendResponse()。这里一般是打印出来。
  1.18.1 首先发送headers
  1.18.2 然后打印内容
  所有请求结束
  注:这里只是ZF的一个大概执行过程。
  这里尤其要注意控制器的几个断点,在那里你可以做很多的事情,比如设置配置之类的。用好这些断点可以事半功倍的效果
  还有要注意插件的几个断点:,这里主要是preDispatch和postdispatch。

posted @ 2012-04-27 21:59  worminone  阅读(428)  评论(0)    收藏  举报