2011-10-06 19 views
9

Sto utilizzando vari moduli e un controller principale per mantenere la coerenza.Zend Framework Render view diversi all'interno di module/controller

Il controller genitore ha una serie di azioni comuni a cui è necessario che ciascuno dei successivi controller figlio abbia accesso. Sto trovando difficile rendere questa azione predefinita rendere una vista corretta.

NON voglio dover aggiungere la stessa vista a ciascuno dei miei moduli - questo potrebbe sconfiggere l'oggetto - ma mi piacerebbe avere una vista predefinita da qualche parte.

ho provato:

$this->_forward('commonaction', 'baselayout', 'default'); 

Questo non funziona per me - come si tenta di elaborare nuovamente l'azione - quando ho già popolato le variabili necessarie nel mio controller genitore.

Qualsiasi aiuto sarebbe fantastico.

UPDATE:

Per chiarire voglio essere in grado di utilizzare una visione comune da un modulo differente. Tutti gli esempi e le soluzioni attualmente assumono un modulo comune. Questo non funziona per me.

+0

Ho aggiornato la mia risposta. Aurelio era sulla strada giusta, ma l'impostazione di aggiungere il percorso dello script è necessaria per l'uso dello script di visualizzazione al di fuori del modulo corrente. –

risposta

5

utilizzare questa istruzione nel controller:

// Render 'foo' instead of current action script 
$this->_helper->viewRenderer('foo'); 

// render form.phtml to the 'html' response segment, without using a 
// controller view script subdirectory: 
$this->_helper->viewRenderer('form', 'html', true); 

dal documento ufficiale http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

non è possibile (al meglio delle mie conoscenze) per mostrare vista del modulo differente. Inoltre non c'è traccia di questa domanda nel documento ufficiale.

+0

Hey Aurelio - grazie al problema principale di questa soluzione è che cerca ancora la vista all'interno dello stesso modulo in cui sono attualmente.Che è sbagliato Devo essere in grado di dire che voglio visualizzare X resa dal modulo Y. – Andy

+0

Mi dispiace. Ho capito lo stesso modulo ma controller diversi. –

+0

ah ok mio male. aggiornerà la mia domanda di conseguenza. Sai se è possibile? – Andy

7

ho riparato utilizzando:

$this->_helper->viewRenderer->renderBySpec('foo', array('module' => 'modulename', 'controller' => 'controllername')); 
+1

non accetta il valore 'module', Zend 1.12 – Herokiller

-1

Si può provare (Zend Doc):

$View = new Zend_View(); 
$View->addScriptPath('/path/to/script'); 
+0

Questo non è esattamente ciò che l'OP sta chiedendo. L'impostazione del percorso di script non esegue il rendering di una vista diversa. –

2

Come te, ho più moduli e voleva rendere una vista arbitraria (residente in un modulo) nel controller di un modulo diverso.

Questo era l'unico modo che ho potuto farlo funzionare, dopo aver provato molti approcci: azione

Controller:

public function xyzAction() 
{ 
    $this->_helper->layout->disableLayout(); 
    $view = new Zend_View(); 
    $view->setScriptPath(APPLICATION_PATH . '/modules/moduleB/views/scripts/abcBlahBlah'); 
    echo $view->render('yadaYada.phtml'); 
    exit; 
} 
2

Provare quanto segue nella vostra azione:

  • First si specifica il percorso del modulo in cui è archiviato lo script di visualizzazione
  • Quindi si specifica il nome dello script di visualizzazione per il renderizzatore di viste

vedere il codice seguente:

// Add a script path to the directory in the other module 
$this->view->addScriptPath(APPLICATION_PATH . '/modules/baselayout/views/scripts'); 
// Tell the viewRenderer to use the view script 'scriptname' 
$this->_helper->viewRenderer('scriptname');