2009-10-23 4 views

Respuesta

5

Componentes no manejan las plantillas, sólo se puede utilizar parciales. Si tiene que devolver un parcial específica desde el interior de su clase de componentes que puede hacer algo como esto:

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

Tener una mirada hacia el symfony book, chapter 7 view layer

10

No existe un método setTemplate en sfComponents. Básicamente tiene 3 opciones:

  1. Asigne un nombre a su componente igual al parcial que desea que muestre el componente. Esto puede no ser posible si tiene varios componentes que le gustaría compartir con la misma plantilla.
  2. Crea un parcial con el mismo nombre de tu componente e incluye el parcial allí. Es decir, si tenía un componente con un método executeFoo() que quería representar la plantilla _bar.php, simplemente llame al include_partial('bar', $vars) dentro de _foo.php.
  3. Cargue el PartialHelper y represente el método parcial de ejecución manual dentro del componente y haga que el componente devuelva sfView :: NONE.
+0

Pero tenga cuidado al devolver sfView :: NONE en un componente no guardará en caché el componente, al menos en 1.0 - definitivamente vale la pena verificar que aún se genere el archivo de caché – timmow

+0

¿Está seguro de que el componente aún no se almacenará en caché incluso si el texto es prestados dentro de ella? Si eso es cierto, entonces sí, no use el método 3 si quiere un componente almacenable en caché (nunca he usado el método 3, yo mismo) –

+0

+1 para n.2 para mantener las cosas simples – Dziamid

5

Para evitar esto, yo estoy haciendo:

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

Esto me salvó un montón de archivos de plantilla vacíos. – Lg102

0

Esto funcionó para mí:

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

Obviamente la plantilla tiene que ser exactamente en el mismo módulo.

Cuestiones relacionadas