2009-10-23 3 views

risposta

5

componenti non gestiscono i modelli, è possibile utilizzare solo parziali. Se è necessario restituire una specifica parziale da dentro la classe componenti si può fare qualcosa di simile:

return get_partial('module/action', array('paramName' => $paramValue)); 

Avere uno sguardo al symfony book, chapter 7 view layer

10

Non esiste un metodo setTemplate su sfComponents. In pratica hai 3 opzioni:

  1. Assegna un nome al tuo componente uguale al partial che desideri rendere il componente. Questo potrebbe non essere possibile se hai più componenti che desideri condividere lo stesso modello.
  2. Creare un partial con lo stesso nome del componente e includerne il parziale. Cioè, se tu avessi un componente con un metodo executeFoo() per il quale vuoi rendere il modello _bar.php, chiama semplicemente include_partial('bar', $vars) all'interno di _foo.php.
  3. Caricare il PartialHelper e rendere il partial manualmente all'interno dei componenti eseguire il metodo e avere il componente sfView :: NONE.
+0

Ma attenzione alla restituzione di sfView :: NONE su un componente non memorizzerà nella cache il componente, almeno nella versione 1.0 - vale sicuramente la pena controllare che il file di cache sia ancora generato – timmow

+0

Sei sicuro che il componente non verrà ancora memorizzato nella cache anche se il testo è reso al suo interno? Se ciò è vero, allora sì, non utilizzare il metodo 3 se si desidera un componente capace di cache (non ho mai usato il metodo 3, me stesso). –

+0

+1 per n.2 per mantenere le cose semplici – Dziamid

5

Per aggirare il problema, sto facendo:

echo get_component('module', 'action', $this->getVarHolder()->getAll()); 
return sfView::NONE; 
+0

Questo mi ha salvato un sacco di file modello vuoti. – Lg102

0

questo ha funzionato per me:

$this->setVar('template', 'templateName'); 

Ovviamente il modello deve essere nello stesso modulo esattamente.