2009-09-25 10 views
1

У меня, похоже, проблема с отображением моего макета дважды. Мне было интересно, вызвано ли это чем-то в моем плагине переднего контроллера (см. Ниже), который использует макет Zend только для определенного модуля, а не в основном приложении. Любые ответы будут высоко оценены. БлагодаряМакет визуализируется дважды

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 или когда я перенаправлены на ErrorController в плагине preDispatch. Вы можете проверить это.

Также я немного подозрительное линии:

$layout->setView($view); 

Является ли это необходимым. Не Zend автоматически назначает представление макету.

+0

Спасибо andho. Я задавался вопросом, может ли это быть на самом деле, но мне действительно нужно использовать его, поскольку я должен передавать значения форм между действиями и не могу заставить его работать с $ this -> _ helper-> redirector. Мне пришлось создать новый объект вида, потому что основное приложение использует гибрид Zend_View/Smarty, и я не хочу менять все мои шаблоны, поскольку они являются чистым Zend_View. – somekindofusernamegoeshere

+0

Зачем вам нужно передавать данные формы другому действию? Является ли действие одним и тем же контроллером. Если так вы не можете назвать $ this-> otherAction(); Или используйте цепочку действий, но это может потенциально отобразить другое представление, если вы не отключите рендеринг для одного из действий – andho

2

Это, как правило, вызвано ErrorController по моему опыту. Я обычно ясно ответ, чтобы убедиться, что нет вложенности:

public function errorAction() { 

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

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

} 
0

При вызове действия из вызова Ajax и макет вызывается дважды, вы можете установить

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

в действии.

В моем проекте я также совершил неправильный вызов ajax, который заставил его сделать другое время. Надеюсь, это поможет

 Смежные вопросы

  • Нет связанных вопросов^_^