ZF 版本: 1.6 在 ZF中, 做为MVC一个重要组层部分的 VIEW控制器由 三部分组成,分别是: 最外层视图应控制器 Zend_Controller_Action_Helper_ViewRenderer, 视图引擎核心层 Zend_View (这一部分是可以重写的, 所谓把 ZF与Smarty整合,主要是这一部分), 视图层最
ZF 版本: 1.6
在 ZF中, 做为MVC一个重要组层部分的 VIEW控制器由 三部分组成,分别是:
最外层视图应控制器 Zend_Controller_Action_Helper_ViewRenderer,
视图引擎核心层 Zend_View (这一部分是可以重写的, 所谓把 ZF与Smarty整合,主要是这一部分),
视图层最底层接口Zend_View_Abstract
在实际的行为控制器以及分发器中, 都是直接使用 Zend_Controller_Action_Helper_ViewRenderer, 这个在ZF 启动程序中就需要注册完成的, 由于底层的Zend_View_Abstract接口约束,以及最外层,ViewRenderer的规范, 致使ZF中的视图层,变得及其灵活, 而且规范,你可以使用ZF视图层, 也完全可以扩展自己的视图层核心引擎.
其次,Zend_Controller_Action_Helper_ViewRenderer, 是一个标准的视图助手, 视图助手有部分方法, 例如 postDispatch, preDispatch 等, 这些都是和视图助手经济人灵活通信的方法,. 因此可以在一个分发器的前后, 可以通过这些方法,执行部分任务. 每一个动作助手都可以定义自己的 postDispatch方法等.
视图文件命名问题:
所有的HTML视图文件的名称部分, 在ViewRenderer这里是做为一个ACTION进行处理的,也就是说, 在控制器类 例如:
function indexAction(){
$this->view->render($actionName);
}
其中, $actionName, 并不能完全认为就是文件名前缀部分, 如果这个名字是连贯的小写字母,那么 这么名字就是直接的HTML视图文件名了, 如果这里面有大小写,那么大写前面在模板中,默认加上了中划线 例如 actionName, 对应的模板文件名应该是action-name.
控制器对象中的视图对象:
这里所谓的控制器,是指对应于模块->控制器->行为结构的控制器,例如 class Test_IndexController, 这样的一个类 .
在ZF中, 行为控制器是又分发器dispacher来实例化,并执行的,在这个过程中, 每一个控制器都有一个默认的 initView方法会被默认执行, 因此, 每一个控制器,也自然有一个属性 $view可以直接访问, 例如 $this->view , 但是这里注意, 这儿$this->view 所指向的起始是视图层三层结构中的 中间层对象, 而并非最外层的视图控制器 View_Renderer对象, 而在输出一个视图的时候,会有一些初始化的工作, 是在这一部分完成的, 因此在控制器中, 不能直接调用$this->view,来操作视图层.
如果想输出一个对象,首先应该通过视图助手获得视图对象 View_Renderer, 然后,通过这个助手来操作视图层.