Upload
nguyenthien
View
222
Download
0
Embed Size (px)
Citation preview
Introduction
Twig
Definitionest un moteur de templates pour PHP
apparu en 2009
syntaxe inspiree de Jinja (moteur de template du frameworkDjango de Python)
issu et utilise par Symfony
supporte par plusieurs IDE : NetBeans, PhpStorm, Eclipse,Microsoft VS...
supporte par plusieurs editeurs de texte : Sublime text,notepad++, vim...
13 Novembre 2017, POEC PHP 2017 3 / 26
Introduction
Twig
Pourquoi? !
permet de separer le code PHP du code html (lisibilite,maintenabilite)
offre la possibilite de modifier un fichier sans influencer ledeuxieme
facilite le travail d’equipe
Inconvenientsralentir le chargement de page
Un langage (de template) de plus a etudier
La gestion des erreurs est plus compliquee
13 Novembre 2017, POEC PHP 2017 4 / 26
Introduction
Twig
Pourquoi? !
permet de separer le code PHP du code html (lisibilite,maintenabilite)
offre la possibilite de modifier un fichier sans influencer ledeuxieme
facilite le travail d’equipe
Inconvenientsralentir le chargement de page
Un langage (de template) de plus a etudier
La gestion des erreurs est plus compliquee
13 Novembre 2017, POEC PHP 2017 4 / 26
Introduction
Twig
Autres moteurs de templateSmarty
Liquid
Mustache
Plates
Talus’TPL
...
13 Novembre 2017, POEC PHP 2017 5 / 26
Fonctionnalites de base
Premiere fonctionnalite {# commentaire #}
{# commentaire #}n’affiche rien et ne fait riens’utilise seulement pour les commentaires multi-lignes
13 Novembre 2017, POEC PHP 2017 6 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}
{{ variable }}affiche la valeur de la variable variable
est l’equivalent de <?php echo $variable; ?>
{{ tableau[’idColonne’] }}affiche le contenu d’un element du tableauest l’equivalent de <?php echo $tableau[’idColonne’];?>
13 Novembre 2017, POEC PHP 2017 7 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}
{{ variable }}affiche la valeur de la variable variable
est l’equivalent de <?php echo $variable; ?>
{{ tableau[’idColonne’] }}affiche le contenu d’un element du tableauest l’equivalent de <?php echo $tableau[’idColonne’];?>
13 Novembre 2017, POEC PHP 2017 7 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}{{ objet.attribut }}
affiche, logiquement, la valeur de $ attribut de $objet
est l’equivalent de <?php echo $objet->attribut(); ?>
Reellement {{ objet.attribut }}affiche $objet[’attribut’] si $objet est un tableauaffiche $objet-> attribut si $objet est un objet et$ attribut est publicaffiche $objet->attribut() si $objet est un objet etattribut() est une methode publicaffiche $objet->getAttribut() si $objet est un objet etgetAttribut() est une methode publicaffiche $objet->isAttribut() si $objet est un objet etisAttribut() est une methode publicn’affiche rien et retourne null sinon.
13 Novembre 2017, POEC PHP 2017 8 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}{{ objet.attribut }}
affiche, logiquement, la valeur de $ attribut de $objet
est l’equivalent de <?php echo $objet->attribut(); ?>
Reellement {{ objet.attribut }}affiche $objet[’attribut’] si $objet est un tableauaffiche $objet-> attribut si $objet est un objet et$ attribut est publicaffiche $objet->attribut() si $objet est un objet etattribut() est une methode publicaffiche $objet->getAttribut() si $objet est un objet etgetAttribut() est une methode publicaffiche $objet->isAttribut() si $objet est un objet etisAttribut() est une methode publicn’affiche rien et retourne null sinon.
13 Novembre 2017, POEC PHP 2017 8 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}
{{ variable1 ∼ " " ∼ variable2 }}affiche le resultat de la concatenation de variable1 etvariable2
est l’equivalent de<?php echo $variable1 . ’ ’ . $variable2 ; ?>
13 Novembre 2017, POEC PHP 2017 9 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ variable | fonction filtre }} :utilisation de filtre
filtre :upper : convertit les lettres en majuscules comme strtupper()en PHP (lower est la reciproque)length : calcule le nombre d’elements d’un tableau ou le nombrede caracteres d’une chaınesort : trie les elements d’un tableautrim : supprime les caracteres speciaux indiques du debut et dela fin d’une chaıne de caracteresstriptags : supprime les balises HTMLla liste est disponible :https ://twig.symfony.com/doc/2.x/filters/index.html
13 Novembre 2017, POEC PHP 2017 10 / 26
Fonctionnalites de base
Deuxieme fonctionnalite {{ ... }}
Remarques
Par defaut, Twig protege les variables en appliquant un filtre pourles proteger de balises HTMLPour desactiver le filtre, on peut utiliser le filtre rawPar exemple {{ variable | raw }}
13 Novembre 2017, POEC PHP 2017 11 / 26
Fonctionnalites de base
La fonction asset()
Caracteristiques
Elle permet de faire reference au repertoire web du projet symfonydepuis les vuesElle permet donc de faire references au fichiers de ressources(css, javascript, images ...)
<link href="{{ asset(’css/style.css’) }}" rel="stylesheet" /><script src="{{ asset(’js/jquery-1.11.3.js’) }}"></script><script src="{{ asset(’js/bootstrap.js’) }}"></script><script src="{{ asset(’js/script.js’) }}"></script>
13 Novembre 2017, POEC PHP 2017 12 / 26
Fonctionnalites de base
La fonction asset()
Caracteristiques
Elle permet de faire reference au repertoire web du projet symfonydepuis les vuesElle permet donc de faire references au fichiers de ressources(css, javascript, images ...)
<link href="{{ asset(’css/style.css’) }}" rel="stylesheet" /><script src="{{ asset(’js/jquery-1.11.3.js’) }}"></script><script src="{{ asset(’js/bootstrap.js’) }}"></script><script src="{{ asset(’js/script.js’) }}"></script>
13 Novembre 2017, POEC PHP 2017 12 / 26
Fonctionnalites de base
Les fonctions path() et url()
Caracteristique
Elle permet de faire reference a une route enregistree dans notrerouteur
<a href="{{ path(’root_personne’) }}">Accueil</a><a href="{{ url(’root_personne’) }}">Accueil</a>
On peut aussi passer des parametres a notre route
<a href="{{ path(’root_personne’,{’id’: ’value’}) }}">Accueil</a><a href="{{ url(’root_personne’) }}">Accueil</a>
13 Novembre 2017, POEC PHP 2017 13 / 26
Fonctionnalites de base
La fonction render()
Caracteristique
Elle permet d’executer une methode d’un controleur
{{ render(controller(Personne:add)) }}
Ici on appelle la methode addAction() du controleurPersonneController
13 Novembre 2017, POEC PHP 2017 14 / 26
Fonctionnalites de base
Les variables globales
Les variables globales
app.request : la requete d’un controleurapp.session : service sessionapp.user : pour recuperer l’utilisateur courantapp.debug : True si le mode debug est active, False sinon.app.environment : l’environnement courant dev ou prod
13 Novembre 2017, POEC PHP 2017 15 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
{% ... %}On peut faire toutes les structures de base connues en algorithmique
declaration de variablesstructure conditionnellestructure iterativeles blocks (les procedures)l’heritage
13 Novembre 2017, POEC PHP 2017 16 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Declarer une variable
{# Syntaxe en Twig #}{% set variable = ’bonjour’ %}
/* code PHP equivalent */<?php
$variable = ’bonjour’;?>
13 Novembre 2017, POEC PHP 2017 17 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}Structure conditionnelle
/* code PHP */<?php if($perso->getSalaire() < 2000) { ?>Doctorant
<?php } elseif($perso->getSalaire() > 4000) { ?>Professeur
<?php } else { ?>Maitre de conference
<?php } ?>
{# Equivalent en Twig #}{% if perso.salaire < 2000 %}Doctorant
{% elseif perso.salaire > 4000 %}Professeur
{% else %}Maitre de conference
{% endif %}
13 Novembre 2017, POEC PHP 2017 18 / 26
Fonctionnalites de base
Remarques
Tester l’existence d’une variable
{% if variable is defined %} ... {% endif %}
Tester la parite d’une variable
{% if variable is even %} ... {% endif %}
Tester si une variable est divisible par 5
{% if variable is divisible by 5 %} ... {% endif %}
Autres fonctions de test predefinieshttps://twig.symfony.com/doc/2.x/tests/index.html
13 Novembre 2017, POEC PHP 2017 19 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Structure iterative
{# Syntaxe en Twig #}{% for i in 0..5 %}
Ceci est la ligne {{ i }}{% endfor %}
/* code PHP equivalent */<?phpfor($i=0;$i<=5;$i++) { ?>
Ceci est la ligne <?php $i ?><?php } ?>
13 Novembre 2017, POEC PHP 2017 20 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Structure iterative
{# Syntaxe en Twig #}<ul>{% for valeur, clef in liste %}<li>{{ clef }} ˜ ’ : ’ ˜ {{ valeur }}</li>
{% endfor %}</ul>
/* code PHP equivalent */foreach($liste as $clef => $valeur) {
...}
13 Novembre 2017, POEC PHP 2017 21 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
{% ... %}La boucle for genere un objet loop contenant les attributs suivants :
loop.index : numero de l’iteration courante si l’indicecommence de 1loop.index0 : numero de l’iteration courante si l’indicecommence de 0loop.length : le nombre total d’iterationsloop.first : contient true s’il s’agit de la premiere iterationloop.last : contient true s’il s’agit de la derniere iterationloop.revindex et loop.revindex0 : contiennent le nombred’iterations restantes avant la fin de la boucle
13 Novembre 2017, POEC PHP 2017 22 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Notion d’inclusion (comme en PHP)
{% include ’page.twig’ %}
Inclusion avec ignorance d’erreur si page inexistante
{% include ’page.twig’ ignore missing %}
Notion d’inclusion conditionnelle
{% include condition ? ’page1.twig’ : ’page2.twig’%}
13 Novembre 2017, POEC PHP 2017 23 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Notion d’inclusion (comme en PHP)
{% include ’page.twig’ %}
Inclusion avec ignorance d’erreur si page inexistante
{% include ’page.twig’ ignore missing %}
Notion d’inclusion conditionnelle
{% include condition ? ’page1.twig’ : ’page2.twig’%}
13 Novembre 2017, POEC PHP 2017 23 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Notion d’inclusion (comme en PHP)
{% include ’page.twig’ %}
Inclusion avec ignorance d’erreur si page inexistante
{% include ’page.twig’ ignore missing %}
Notion d’inclusion conditionnelle
{% include condition ? ’page1.twig’ : ’page2.twig’%}
13 Novembre 2017, POEC PHP 2017 23 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}Notion de block
{% block nom_block %}...
{% endblock %}
Exemple
{# src/Root/PersonneBundle/Resources/views/base.html.twig#}
<!DOCTYPE HTML><html>
<head><title>{% block title %}Personne {% endblock %}</title>
</head><body>
{% block body %} ... {% endblock %}</body>
</html>13 Novembre 2017, POEC PHP 2017 24 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}Heritage entre block
{# src/Root/PersonneBundle/Resources/views/Default/index.html.twig #}<!DOCTYPE HTML><html>
<head><title>
{% extends "RootPersonneBundle::view.html.twig" %}{% block title %}{{ parent() }} - Index{%endblock %}
</title></head><body>
{% block body %} ... {% endblock %}</body>
</html>
13 Novembre 2017, POEC PHP 2017 25 / 26
Fonctionnalites de base
Troisieme fonctionnalite {% ... %}
Remarques
L’heritage sert a creer un template pere (avec un ou plusieurs blocks) quicontient le design de base de notre site et les templates fils vont doncpouvoir les modifier
Si le template fils ne reecrit pas un block herite, il aura la valeur definiepar le pere pour ce block
parent() permet de recuperer le contenu du block cote pere
Generalement, on cree un fichier de template contenant les partiescommunes a toutes les pages et on le place danssrc/Root/PersonneBundle/Resources/views/ (il n’y a pas deDefault, c’est independant de tout Controller)
On peut faire des include pour ajouter entierement un template
On peut faire des inclusions en passant par le controleur {{ render(controller("RootPersonneBundle:Default:method"))}} acondition que methodAction() soit definie dans le controleur
13 Novembre 2017, POEC PHP 2017 26 / 26