Zend 覆盖默认视图对象

Posted

技术标签:

【中文标题】Zend 覆盖默认视图对象【英文标题】:Zend overwrite default view object 【发布时间】:2011-05-20 08:46:09 【问题描述】:

如何覆盖 zend 框架中的默认视图对象,以便拥有自定义视图对象?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
    
    function _initViewHelpers()  
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('html4_STRICT');
        $view->setHelperPath(APPLICATION_PATH . '/helpers', '');        
        $view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
                         ->appendName('description', 'Zend Framework');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Zend Custom View');
        $view->setScriptPath(APPLICATION_PATH . '/themes/admin');
        
        return $view;
    

默认视图包含模块的默认脚本路径。我想要所有模块的一条路径,以启用模板系统。 setScriptPath 方法应该覆盖视图对象生成的默认路径,但它没有。

array(2)  [0]=> string(66) "C:/xampp/htdocs/NEOBBS_v6/application/modules/admin/views\scripts/" [1]=> string(51) "C:\xampp\htdocs\NEOBBS_v6\application/themes/admin/" 

它有两个scriptPaths。这可以通过覆盖默认视图对象来完成吗?

【问题讨论】:

【参考方案1】:

ArneRie 发布的内容是正确的,但是 ViewRenderer 会检查是否设置了标准脚本路径,如果没有则添加它。由于检查了路径后进先出,因此发生的情况是 ViewRenderer 在您的路径之后添加标准路径,然后始终使用该路径。

对我有用的是同时设置标准路径和我的自定义路径,自定义路径在最后,类似于:

$view->setScriptPath(array(
    APPLICATION_PATH . '/views/scripts/', // or whatever the standard path is
    APPLICATION_PATH . '/themes/admin'
));

不过可能有更好的解决方案。

【讨论】:

是的,代码看起来并不优雅,但现在非常有用,谢谢 tim 这个答案帮助我解决了覆盖默认视图助手的问题,我似乎无法做到这一点。我最终在我的自定义视图帮助器路径之前将默认的 zend 视图帮助器路径添加到我的 application.ini 中,它成功了!干杯:)【参考方案2】:

尝试添加:

        $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
        $viewRenderer->setView($view);
        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

【讨论】:

根本不起作用。似乎 setScriptPath 的默认行为是添加新值而不是覆盖它 尝试 addScriptPath() ,我认为使用了最后添加的路径

以上是关于Zend 覆盖默认视图对象的主要内容,如果未能解决你的问题,请参考以下文章

子视图覆盖了 UITableView 的第一行

Django 基于类的视图:覆盖表单名称

覆盖 SwiftUI 视图的默认背景颜色?

如何配置代码-PHPUnit版本8.5.1对Zend Framework 2.4的覆盖范围?

设置日期/时间输入字段的默认视图,覆盖用户区域设置?

使用 zend 视图对象作为持久存储