我的布局显示两次似乎有问题。我想知道这是不是由我的前端控制器插件(见下文)引起的,它只针对特定模块而不是主应用程序使用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);
}
}
}
}
答案 0 :(得分:2)
这通常是由我的经验中的ErrorController引起的。我通常会清除响应,以确保没有嵌套:
public function errorAction() {
$this->getResponse()->clearBody();
//handle error ........
}
答案 1 :(得分:1)
在使用_forward或重定向到preDispatch插件中的errorController时遇到此问题。你可以查看这些东西。
我对这条线也有点怀疑:
$layout->setView($view);
是否有必要。 Zend不会自动将视图分配给布局。
答案 2 :(得分:0)
如果您从Ajax调用中调用操作并且您的布局被调用两次,则可以设置
$this->_helper->layout->disableLayout();
在行动中。
在我的项目中,我也做了一个错误的ajax调用,这使得它再次渲染。希望这有帮助