2009-10-23 11 views

Répondre

5

composants ne gèrent pas des modèles, vous ne pouvez utiliser partials. Si vous avez besoin de retourner une partie de l'intérieur de votre classe de composants spécifiques que vous pouvez faire quelque chose comme ceci:

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

Jetez un coup d'oeil dans le symfony book, chapter 7 view layer

10

Il n'y a pas de méthode de setTemplate sur sfComponents. Vous avez essentiellement 3 options:

  1. Nommez votre composant de la même manière que le partiel que vous souhaitez rendre au composant. Cela peut ne pas être possible si vous avez plusieurs composants que vous souhaitez partager le même modèle.
  2. Créez une partie avec le même nom de votre composant et incluez-y le partiel. C'est-à-dire, si vous aviez un composant avec une méthode executeFoo() que vous vouliez rendre le modèle _bar.php, appelez simplement include_partial('bar', $vars) à l'intérieur de .
  3. Chargez PartialHelper et restituez le partiel manuellement à l'intérieur de la méthode execute des composants et faites retourner le composant sfView :: NONE.
+0

Mais attention, le retour de sfView :: NONE sur un composant ne mettra pas en cache le composant, au moins dans 1.0 - cela vaut vraiment la peine de vérifier que le fichier cache est toujours généré – timmow

+0

Etes-vous sûr que le composant sera toujours caché? rendu à l'intérieur de celui-ci? Si c'est vrai, alors oui, n'utilisez pas la méthode 3 si vous voulez un composant cache-able (je n'ai jamais utilisé la méthode 3 moi-même.) –

+0

+1 pour n.2 pour garder les choses simples – Dziamid

5

Pour contourner ce problème, je fais:

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

Cela m'a sauvé un tas de fichiers modèles vides. – Lg102

0

Cela a fonctionné pour moi:

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

Il est évident que le modèle doivent être exactement dans le module même.

Questions connexes