Zend覆盖默认视图对象

时间:2011-05-20 08:46:10

标签: zend-framework view bootstrapping viewrendering

如何覆盖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/" }

它有两个scriptPath。可以通过覆盖默认视图对象来完成吗?我怎么能这样做,谢谢先进的

2 个答案:

答案 0 :(得分:3)

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

对我来说有用的是同时设置标准路径和自定义路径,自定义路径是最后一个,如:

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

虽然可能有更好的解决方案。

答案 1 :(得分:2)

尝试添加:

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