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 }}

Comparer deux dates avec TWIG

Lors du développement d’un projet, il est fréquent de devoir comparer deux dates. Grâce à TWIG, c’est très pratique de manipuler les objets mais aussi d’en faire autant avec les dates, et ceci sensiblement de la même manière qu’avec PHP et sa fonction date();

Voici la syntaxe TWIG à utiliser dans un template :

{% if "now"|date('Ymd')  > evenement.date|date('Ymd') %}
   Mon évènement est terminé
{% else %}
   Mon évènement est à venir / en cours
{% endif %}

Attention à bien vérifier l’ordre ‘Ymd’ comme paramètre de date(), en étant étourdi on arrive vite à des résultats improbables : 20121005 (YearMonthDay) n’est pas égal à 05102012 (DayMonthYear).

De même que date(‘Ymd’) n’est pas égal à date(‘Y m d’).