Faire un include avec Symfony2 et Twig

Avec Symfony 1.4, il était possible de faire 2 sortes d’include différents : le partial et le component. La différence était qu’un partial permettait une include assez classique, en revanche le component permettait d’avoir des actions propres.

Sur Symfony2, et avec TWIG, les deux méthodes sont conservées, même si celles-ci ne portent plus les mêmes noms officiels.

Pour faire un include classique sous Symfony2, de type Partial, on utilise la syntaxe suivante :

{% include "MyBundle:Controller:myTemplate.html.twig" %}

Notez que si vous voulez inclure un template présent dans app/ressources/views, vous n’êtes pas dans un Bundle, et n’avez pas de controller attitré, la bonne syntaxe serait alors

{% include "::myTemplate.html.twig" %}

Dans d’autres cas, vous aurez besoin de faire des traitements propres à ces templates, il vous faudrait donc un controller et une action propre à ce template. L’appel de l’inclusion se fait alors d’une autre manière: avec render.

{# dans mon template twig #}
{% render "MyAppMyBundle:myController:myTemplate" %}

{# pour prendre un exemple :#}
{% render "MonsiteDiscussionBundle:Blog:listeDeMesMessages" %}

(A noter une différence avec l’inclusion classique faite avec ‘include’, cela marche en ne mettant pas l’extension de fichier .html.htwig après le nom du template.)

Le controller utilisé est donc :

//MyApp\MyBundle\Controller;

public function listeDeMesMessagesAction()
{
          //mon traitement
          $maVar = 'lorem ipsum';

         return $this->container->get('templating')->renderResponse('MonsiteDiscussionBundle:Blog:listeDeMesMessages.html.twig', array(
           'maVar' => $maVar
        ));
}

Dans votre template TWIG, vous pouvez donc désormais appeler votre variable et en faire ce que vous voulez, comme par exemple l’afficher avec :

{{ maVar }}