SYMFONY 2 Minh THAI moshi@moshi.fr http://moshi.fr/symfony/symfony2-lp.pdf 1
TWIG TWIG est un moteur de template au même titre que SMARTY. Il permet aux non développeurs de gérer la mise en forme d un site internet via une syntaxe simplifiée. Le projet TWIG a été repris par Sensio pour l incorporer au projet Symfony, vous trouverez donc un couplable important entre TWIG et Symfony. http://twig.sensiolabs.org/doc/templates.html 48
Fichiers App/Resources/view/base_layout.html.twig va être votre layout de base (base du site) Dans chaque Bundle vous aurez un répertoire Resources/views/ qui va être votre répertoire de template pour votre Bundle. Notez que vous pouvez avoir des sous dossiers par exemple Demo, pour appeler la template index.html.twig dans Demo on utilisera le chemin : MonBundle:Demo:index.html.twig Si on veut appeler toto.html.twig directement depuis Resources/views/ on utilisera ce chemin : MonBundle::toto.html.twig 49
Twig - logique {{ }} Affichage {% %} fonction ou logique Condition {% if %} {% elseif %} {% else %} {% endif %} Foreach {% for mavariableutilisée in montableau %} {%else %}Aucun résultat {% endfor %} 50
Twig Héritage Twig permet l héritage, profiter des éléments parents tout en les surchargeant Attention : à partir du moment ou une template hérite d une autre, les affichages doivent s exécuter à l intérieur de blocks. {% extends 'MonBundle::base.html.twig' %} on hérite de base.html.twig {% block content %}Test{% endblock%} un bloc est une zone que l on pourra modifier ou pas via les templates filles. {% block footer%}{{ parent() }} A rajouter {% enblock %} on appelle le block parent, et on lui rajoute un élément ici {{ parent() }} permet de récupérer le contenu du bloc parent et de l afficher 52
Commandes avancées {% include %} inclure une autre template {% render "MmiBundle:Controller:listAction" with {"max" : 3} %} render permet d inclure une action (donc une autre page) directement dans une template, on donne comme argument le chemin du bundle et de l action avec des arguments via with {% set foo = 'foo' %} on initialise des variables que l on peut afficher ou utiliser dans le code TWIG. {% raw %} {% endraw %} ce qui sera présent a l intérieur ne sera pas parsé, on peut donc écrire n importe quel code twig il ne sera pas reconnu à l intérieur de ces balises. La concaténation sous TWIG s effectue avec la vague ~ Exemple {{ title ~ «Suffixe» }} va ajouter suffixe à l affiche de notre title dynamique 53
Inclusion Pour render et include, on peut les utiliser dans des boucles : {% for box in boxes %} {% include "render_box.html.twig" %} {% endfor %} Ici render_box.html.twig va pouvoir utiliser la variable box directement dans la sous template 54
Liens <a href="{{ path('homepage') }}">Home<a/> //chemin relative <a href="{{ url('homepage') }}">Home<a/> //chemin absolute <a href="{{ path('show', {'id':article.id}) }}">Home</a> // avec des paramètres Path et url prennent comme argument la route name que vous avez créé dans la gestion de vos routes (en annotation dans notre cas) 55
Variables globales {{ app.security }} pour récupérer des informations d authentification {{ app.user }} récupérer l utilisateur connecté {{ app.request }} récupérer la request de la page (url, variable post et get etc) {{ app.request.get( toto ) }} va récupérer la valeur $_GET[ toto ] {{ app.request.request.get( titi ) va récupérer la valeur $_POST[ titi ] {{ app.session }} récupérer la variable $_SESSION 56
Filter Un filtre est une modification de l affiche ou d une variable à la volée sous Twig. {{ post.published_at date( m/d/y ) }} va afficher la date de published_at sous le format strftime {{ post.published_at date_modify("+1 day") date("m/d/y") }} va modifier la date d un jour et l afficher dans le format souhaité {{ title replace({'titi': toto, 'tata': "tutu }) ici on remplace titi par toto et tata par tutu {{ url url_decode() }} {{ title upper }} {{ title lower }} {{ text striptags }} {{ array join(, ) }} va joindre tous les éléments du tableau avec une virgule {{ str split(, ) }} va transformer en array une chaine de caracère en séparant les virgules {{ array reverse }} {{ array length }} {{ title trim }} {{ text e }} affiche le code html, css ou javascript de façon à ce que le navigateur ne l interprête pas, affichage plain text 57
Exercice Reprenez votre Exercice 1 mais en mettant tous les titres en majuscule, Ajouter une date à votre modèle et afficher le sous le format français : «d/m/y» A vos titres de pages préfixez «Mmi», Faites des liens dynamiques entre les 3 pages créées précédemment. Utilisez le système d héritage pour mettre en place rapidement un menu, footer et sidebar sur les 3 pages. La page Listing n aura pas de sidebar. 58