Symfony 5 : TWIG

Symfony 5 : TWIG

Symfony 5 : TWIG Achref El Mouelhi Docteur de l’universite´ d’Aix-Marseille Chercheur en Programmation par contrainte (IA) Ingenieur´ en Genie´ logiciel [email protected] H & H: Research and Training 1 / 64 Plan 1 Introduction 2 Commentaire 3 Interpolation 4 Declaration´ de variable 5 Operations´ sur les variables 6 Structure conditionnelle 7 Structure iterative´ H & H: Research and Training 2 / 64 Plan 8 Filtre 9 Ref´ erencement´ d’un fichier 10 Lien hypertexte 11 Variables globales 12 Inclusion 13 Block et heritage´ 14 Bonnes pratiques H & H: Research and Training 3 / 64 Remarque Symfony 5 utilise la version 3 de Twig. Introduction Symfony Twig Moteur de templates pour PHP. Apparu en 2009. Syntaxe inspiree´ par Jinja (moteur de template du framework Django de Python). Issu et utilise´ par Symfony . Supporte´ par plusieurs IDE : NetBeans, PhpStorm, Eclipse, Visual Studio Code... Supporte´ par plusieurs editeurs´ de texte : Sublime text, notepad++, vim... © Achref EL MOUELHI © H & H: Research and Training 4 / 64 Introduction Symfony Twig Moteur de templates pour PHP. Apparu en 2009. Syntaxe inspiree´ par Jinja (moteur de template du framework Django de Python). Issu et utilise´ par Symfony . Supporte´ par plusieurs IDE : NetBeans, PhpStorm, Eclipse, Visual Studio Code... Supporte´ par plusieurs editeurs´ de texte : Sublime text, notepad++, vim... © Achref EL MOUELHI © Remarque Symfony 5 utilise la version 3 de Twig. H & H: Research and Training 4 / 64 Inconvenients´ Ralentir le chargement de page Un langage (de template) de plus a` etudier´ La gestion d’erreurs est plus compliquee´ Introduction Symfony Twig, Pourquoi ? permet de separer´ le code PHP du code HTML (lisibilite,´ maintenabilite)´ offre la possibilite´ de modifier un fichier sans influencer le deuxieme` facilite le travail d’equipe´ © Achref EL MOUELHI © H & H: Research and Training 5 / 64 Introduction Symfony Twig, Pourquoi ? permet de separer´ le code PHP du code HTML (lisibilite,´ maintenabilite)´ offre la possibilite´ de modifier un fichier sans influencer le deuxieme` facilite le travail d’equipe´ Inconvenients´ © Achref EL MOUELHI © Ralentir le chargement de page Un langage (de template) de plus a` etudier´ La gestion d’erreurs est plus compliquee´ H & H: Research and Training 5 / 64 Introduction Symfony Autres moteurs de template Smarty Liquid Mustache Plates Talus’TPL© Achref EL MOUELHI © ... H & H: Research and Training 6 / 64 Introduction Symfony Trois types de balises f% ... %g : pour executer´ une action f# ... #g : pour definir´ un commentaire ff ... gg : pour afficher © Achref EL MOUELHI © H & H: Research and Training 7 / 64 Introduction Symfony Avant de commencer, considerons´ le contenu suivant pour le controleurˆ HomeController namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class HomeController extends AbstractController { /** * @Route("/home", name="home_route") */ public function index(): Response { © Achref EL MOUELHI © return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ]); } } H & H: Research and Training 8 / 64 Introduction Symfony Et le contenu suivant pour index.html.twig {% extends ’base.html.twig’ %} {% block title %}Home{% endblock %} {% block body %} <div> <h1>Hello© Achref {{ controller_name EL MOUELHI }}!</h1 ©> </div> {% endblock %} H & H: Research and Training 9 / 64 Commentaire Symfony f# commentaire #g n’affiche rien et ne fait rien. s’utilise en mono-ligne et multi-lignes. © Achref EL MOUELHI © H & H: Research and Training 10 / 64 Interpolation Symfony ff var gg permet de recup´ erer´ et afficher la valeur d’une variable var envoyee´ par le controleurˆ est l’equivalent´ de <?php echo $var; ?> © Achref EL MOUELHI © H & H: Research and Training 11 / 64 Pour l’afficher, dans index.html.twig on utilise l’interpolation <div> <h1>Hello {{ controller_name }}!</h1> </div> {% endblock %} Interpolation Symfony Le controleurˆ HomeController envoie a` la vue index.html.twig un tableau contenant une variable nommee´ controller name ayant comme valeur la chaˆınede caracteres` HomeController return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ]); © Achref EL MOUELHI © H & H: Research and Training 12 / 64 Interpolation Symfony Le controleurˆ HomeController envoie a` la vue index.html.twig un tableau contenant une variable nommee´ controller name ayant comme valeur la chaˆınede caracteres` HomeController return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ]); Pour l’afficher, dans index.html.twig on utilise l’interpolation <div> © Achref EL MOUELHI © <h1>Hello {{ controller_name }}!</h1> </div> {% endblock %} H & H: Research and Training 12 / 64 Interpolation Symfony Exercice Creez´ un controleurˆ TwigController La route de ce controleurˆ doit permettre de recup´ erer´ deux parametres` de requeteˆ nom et prenom et les envoyer a` la vue La vue affiche© Achref les valeurs EL envoy MOUELHIees´ par le controleurˆ © H & H: Research and Training 13 / 64 Interpolation Symfony ff tableau[’idColonne’] gg affiche le contenu d’un el´ ement´ du tableau est l’equivalent´ de <?php echo $tableau[’idColonne’]; ?> © Achref EL MOUELHI © H & H: Research and Training 14 / 64 Pour afficher le tableau dans index.html.twig : trois ecritures´ correctes <ul> <li> {{ tableau[0] }} </li> <li> {{ tableau[’1’] }} </li> <li> {{ tableau["2"] }} </li> </ul> Interpolation Symfony Exemple : contenu de la methode´ index de HomeController $tab = [2, 3, 8]; return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ’tableau’ => $tab ]); © Achref EL MOUELHI © H & H: Research and Training 15 / 64 Interpolation Symfony Exemple : contenu de la methode´ index de HomeController $tab = [2, 3, 8]; return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ’tableau’ => $tab ]); Pour afficher le tableau dans index.html.twig : trois ecritures´ correctes <ul> <li> {{ tableau[0] }} </li> <li>© Achref EL MOUELHI © {{ tableau[’1’] }} </li> <li> {{ tableau["2"] }} </li> </ul> H & H: Research and Training 15 / 64 Reellement´ ff objet.attribut gg affiche $objet[’attribut’] si $objet est un tableau. affiche $objet->attribut si $objet est un objet et $attribut est public. affiche $objet->attribut() si $objet est un objet et attribut() est une methode´ public. affiche $objet->getAttribut() si $objet est un objet et getAttribut() est une methode´ public. affiche $objet->isAttribut() si $objet est un objet et isAttribut() est une methode´ public. n’affiche rien et retourne null sinon. Interpolation ff objet.attribut gg affiche, logiquement, la valeur de $ attribut de $objet est l’equivalent´ de <?php echo $objet->attribut(); ?> © Achref EL MOUELHI © H & H: Research and Training 16 / 64 Interpolation ff objet.attribut gg affiche, logiquement, la valeur de $ attribut de $objet est l’equivalent´ de <?php echo $objet->attribut(); ?> Reellement´ ff objet.attribut gg affiche $objet[’attribut’] si $objet est un tableau. affiche $objet->attribut si $objet est un objet et $attribut est public. affiche $objet->attribut() si $objet est un objet et attribut() est une methode´ public. affiche $objet-© Achref>getAttribut() ELsi $objet MOUELHIest un objet et getAttribut() © est une methode´ public. affiche $objet->isAttribut() si $objet est un objet et isAttribut() est une methode´ public. n’affiche rien et retourne null sinon. H & H: Research and Training 16 / 64 Interpolation Pour l’exemple, commenc¸ons par creer´ une entite´ Personne dans src/Entity namespace App\Entity; class Personne { private $id; private $nom; private $prenom; public function getId(): ?int { return $this->id; } public function setId(int $id): void { $this->id = $id; } public function getNom(): ?string { return $this->nom; } public function setNom(string $nom): void { $this->nom = $nom; } © Achref EL MOUELHI © public function getPrenom(): ?string { return $this->prenom; } public function setPrenom(string $prenom): void { $this->prenom = $prenom; } } H & H: Research and Training 17 / 64 Interpolation Dans HomeController, creons´ une instance de Personne use App\Entity\Personne; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class HomeController extends AbstractController { /** * @Route("/home", name="home_route") */ public function index(): Response { $personne = new Personne(); $personne->setId(100); $personne->setNom("wick"); $personne->setPrenom("john"); $tab© = [2, Achref 3, 8]; EL MOUELHI © return $this->render(’home/index.html.twig’, [ ’controller_name’ => ’HomeController’, ’tableau’ => $tab, ’personne’ => $personne ]); } } H & H: Research and Training 18 / 64 Interpolation Symfony Pour afficher les attributs de l’objet Personne dans la vue <ul> <li> {{ personne.id }} </li> <li> {{ personne.nom() }} </li> © Achref EL MOUELHI © <li> {{ personne.getPrenom() }} </li> </ul> H & H: Research and Training 19 / 64 Exemple de concatenation´ <p> {{ personne.prenom ˜ " " ˜ personne.nom }} </p> Interpolation Symfony ff variable1 ∼ "" ∼ variable2 gg affiche le resultat´ de la concatenation´ de variable1 et variable2 est l’equivalent´ de <?php echo $variable1 . ’ ’ . $variable2 ; ?> © Achref EL MOUELHI © H & H: Research and Training 20 / 64 Interpolation Symfony ff variable1 ∼ "" ∼ variable2 gg affiche le resultat´ de la concatenation´ de variable1 et variable2 est l’equivalent´

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    101 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us