1

我的布局显示两次似乎有问题。我想知道这是否是由我的前端控制器插件(见下文)中的某些东西引起的,该插件仅将 Zend Layout 用于特定模块而不是在主应用程序中。任何答案将不胜感激。谢谢

class My_Controller_Plugin_AdoptLayout extends Zend_Controller_Plugin_Abstract

{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {

            $moduleName = $request->getModuleName();                

            if ($moduleName == 'some-module') {

                    if (!Zend_Layout::isEnabled()) {

                            $view = new Zend_View(array('encoding' => 'UTF-8'));
                            $view->addScriptPath(ROOT_DIR . '/modules/some-module/views/scripts/');
                        $view->doctype('XHTML1_STRICT');

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

                            Zend_Layout::startMvc();
                            $layout = Zend_Layout::getMvcInstance();
                            $layout->setLayout('default');
                            $layout->setLayoutPath(APPLICATION_PATH . '/modules/some-module/views/scripts/layouts/');
                            $layout->setView($view);                        
                    }

            }                                                           
    }

}

4

3 回答 3

2

根据我的经验,这通常是由 ErrorController 引起的。我通常清除响应以确保没有嵌套:

public function errorAction() {

        $this->getResponse()->clearBody();

//handle error ........

}
于 2009-09-29T18:03:49.100 回答
1

我在使用 _forward 或重定向到 preDispatch 插件中的 errorController 时遇到了这个问题。你可以检查这些东西。

我也有点怀疑这条线:

$layout->setView($view);

有必要吗。Zend 不会自动将视图分配给布局。

于 2009-09-25T14:06:10.297 回答
0

如果你从一个 Ajax 调用中调用一个动作并且你的布局被调用了两次,你可以设置

$this->_helper->layout->disableLayout();

在行动。

在我的项目中,我还进行了错误的 ajax 调用,导致它再次渲染。希望这可以帮助

于 2012-02-27T12:51:26.160 回答