2009-09-25 6 views
1

Je semble avoir un problème avec ma mise en page affichant deux fois. Je me demandais si cela était causé par quelque chose dans mon plugin de contrôleur frontal (voir ci-dessous) qui utilise Zend Layout uniquement pour un module particulier et pas dans l'application principale. Toutes les réponses seront très appréciées. MerciMise en page en cours de rendu deux fois

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);       
        } 

      }               
    } 

}

Répondre

1

J'ai couru sur ce problème lors de l'utilisation _forward ou quand je redirigés vers le ErrorController dans un plug-in preDispatch. Vous pourriez vérifier pour ces choses.

Aussi je suis un peu méfiant à propos de la ligne:

$layout->setView($view); 

Est-il nécessaire. Zend n'assigne pas automatiquement la vue à la mise en page.

+0

Merci andho. Je me demandais si cela pourrait être vrai, mais j'ai vraiment besoin de l'utiliser car je dois passer des valeurs de formulaire entre les actions et ne semble pas pouvoir le faire fonctionner avec $ this -> _ helper-> redirecteur. J'ai dû créer un nouvel objet de vue car l'application principale utilise un hybride Zend_View/Smarty et je ne veux pas changer tous mes modèles car ils sont de purs Zend_View. – somekindofusernamegoeshere

+0

Pourquoi auriez-vous besoin de transmettre des données de formulaire à une autre action? Est l'action dans le même contrôleur. Si oui, vous ne pouvez pas appeler $ this-> otherAction(); Ou utilisez le chaînage d'action, mais cela peut potentiellement afficher une autre vue à moins que vous ne désactiviez le rendu pour l'une des actions – andho

2

Ceci est généralement causé par le ErrorController dans mon expérience. Je clair généralement la réponse pour vous assurer qu'il n'y a pas de nidification:

public function errorAction() { 

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

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

} 
0

Si vous appelez une action d'un appel Ajax et votre mise en page est appelé deux fois, vous pouvez définir

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

dans l'action.

Lors de mon projet, j'ai également fait un mauvais appel ajax, ce qui l'a fait rendre une autre fois. Espérons que cela aide

Questions connexes