background image

PHP 教程:Zend 的 MVC 机制使用分析()

以下是 Zend 的 MVC 机制使用说明与示例,供大家参考

代码

$front

 = Zend_Controller_Front::getInstance(); 

Zend_Layout::startMvc(

array

('layoutPath' => USVN_LAYOUTS_DIR)); 

 

$front

->setRequest(

new

 USVN_Controller_Request_Http()); 

$front

->throwExceptions(true); 

$front

->setBaseUrl(

$config

->url->base); 

 

$router

 = 

new

 Zend_Controller_Router_Rewrite(); 

$routes_config

 = 

new

 USVN_Config_Ini(USVN_ROUTES_CONFIG_FILE, 

USVN_CONFIG_SECTION); 

$router

->addConfig(

$routes_config

, 'routes'); 

$front

->setRouter(

$router

); 

$front

->setControllerDirectory(USVN_CONTROLLERS_DIR); 

 
Zend_Controller_Front::getInstance()->dispatch(); 

分析

首先看下 Zend_Controller_Front::getInstance 是调用单例模式,实例化了它的内部属性
_plugins,实例化了一个 Zend_Controller_Plugin_Broker 类。
这个类是管理 front 的插件的类。先看一个 Front 中的方法 public function 
registerPlugin(Zend_Controller_Plugin_Abstract $plugin, $stackIndex = null)
意思是如果你有一个自己的插件要插入使用的话,调用这个函数能把你自己的插件委托
给 Zend_Controller_Plugin_Broker 使用。
如果你有愿望继续跟下去你会看到注册插件做的一件最根本的事情就是把 request 和
response 放入到你的插件中去(setRequest 和 setResponse)。
class Zend_Controller_Plugin_Broker extends Zend_Controller_Plugin_Abstract
这个实现了抽象类 Zend_Controller_Plugin_Abstract。
Zend_Controller_Plugin_Abstract 是所有插件的抽象类,所有用户自己定义的插件或者
Zend 已有的插件都要从这个类继承。这里就看到了,前端控制器 Front 就是使用 broker 作
为用户插件注册。