2009-09-25 101 views
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);       
        } 

      }               
    } 

}

回答

1

我一直在使用的時候_forward遇到這個問題,或者當我一個preDispatch插件中重定向到errorController。你可以檢查這些東西。

而且我有點懷疑,該行:

$layout->setView($view); 

是否有必要。不會Zend自動將視圖分配給佈局。

+0

謝謝安和。我想知道它是否可能是_forward實際上,但我真的需要使用它,因爲我必須在動作之間傳遞表單值,似乎無法讓它與$ this - > _ helper-> redirector一起工作。 我不得不創建一個新的視圖對象,因爲主應用程序使用Zend_View/Smarty混合,我不想改變我所有的模板,因爲它們是純Zend_View。 – somekindofusernamegoeshere 2009-09-25 14:15:08

+0

爲什麼你需要將表單數據傳遞給另一個動作?該行爲是否在同一個控制器中。如果是這樣,你不能調用$ this-> otherAction();或者使用動作鏈接,但這可能會呈現另一個視圖,除非您關閉任何一個動作的呈現 – andho 2009-09-25 14:24:09

2

這通常是由我的經驗中的ErrorController引起的。我通常清除響應,以確保沒有嵌套:

public function errorAction() { 

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

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

} 
0

如果調用從一個Ajax調用一個動作,你的佈局被調用兩次,你可以在動作設置

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

在我的項目中,我也做了一個錯誤的ajax調用,這使得它再次渲染。希望這可以幫助