在插件中添加zend视图的路径

时间:2013-01-06 11:54:33

标签: zend-framework

我正在尝试在preDispatch插件中为我的视图脚本添加新路径。

我的最终目标是从同一个Zend Framework应用程序运行多个站点,每个站点都有自己的布局和视图脚本。但是,我希望使用默认布局/视图,其中站点没有自己的视图/布局。

我已经让布局正常工作但我无法加载视图脚本。

我的观点文件夹布局如下

/application
    /modules
        /views
            /scripts
                /index
                    index.phtml -> the default index controller view script
                /sites
                    /domingod -> this is a site
                        /index
                            /index.phtml -> the sites index controller view script

我想要实现的是加载domingod / index / index.phtml中的索引视图脚本,如果找不到这个文件,我想要渲染默认的index.phtml视图脚本。

到目前为止我已经尝试了这个但没有运气

Zend_Layout::getMvcInstance()->getView()->setScriptPath($viewScriptPath);

这似乎添加了路径,但ZF仍然呈现默认的index.phtml而不是网站(domingod)。

我希望这一切都有道理,非常感谢。

加里

2 个答案:

答案 0 :(得分:1)

我想出的解决方案是检查网站是否有视图脚本,如果它已设置为渲染。

class FreedomS_Zend_Controller_Plugin_SetView extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            $module = $request->getModuleName();
            $controller = $request->getControllerName();
            $action = $request->getActionName();

            $viewScriptPath = APPLICATION_PATH . '/modules/' . $module . '/views/scripts/sites/' . Zend_Registry::get('siteId') . '/';

            $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
            if (file_exists($viewScriptPath . $controller . '/' . $action . '.phtml'))
                $view->addScriptPath($viewScriptPath);
        }
}

答案 1 :(得分:0)

实际上它总是寻找index / index.phtml。这是基本动作和基本控制器。如果你想实现你的目标,我认为你应该通过一些检查来设置重定向。

$this->_redirect(   $this
                            ->view
                            ->url(array('controller' => 'domingod',
                                        'action' => 'index')));
            return;

但在我看来,你应该确定你的网站上有什么,不知道你有什么。如果站点不存在,请设置重定向链接,您的网站将作为瑞士时钟。