Symfony2 - twig · Introduction Twig Definition´ est un moteur de templates pour PHP apparu en...

32
Symfony2 - twig Achref El Mouelhi 13 Novembre 2017, POEC PHP 2017 1 / 26

Transcript of Symfony2 - twig · Introduction Twig Definition´ est un moteur de templates pour PHP apparu en...

Symfony2 - twig

Achref El Mouelhi

13 Novembre 2017, POEC PHP 2017 1 / 26

Plan

1 Introduction

2 Fonctionnalites de base

13 Novembre 2017, POEC PHP 2017 2 / 26

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