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。