Programmation PHP avec Symfony/Twig
Installation.
Twig est un moteur de templates pour le langage de programmation PHP, utilisé par défaut par le framework Symfony. Son livre officiel faisant 156 pages, la présente pas aura plutôt un rôle d'aide mémoire et d'illustration.
Pour exécuter du code sans installer Twig, il existe https://twigfiddle.com/.
composer require symfony/templating
Anciennement sur Symfony 3 :
composer require twig/twig
Syntaxe native.
Les mots réservés suivants s'ajoutent au HTML déjà interprété :
Chaines de caractères.
Concaténation.
Il existe de multiples manière de concaténer des chaines. Par exemple avec l'opérateur de concaténation ou par interpolation :
Tableaux.
Création.
Pour créer un tableau itératif :
Un tableau associatif :
À plusieurs lignes :
 1: 'janvier',
 2: 'février',
 3: 'mars',
Multidimensionnel :
 {'key1': 'value1'},
Dans un "for ... in", pour séparer chaque élément avec une virgule :
Pour créer un tableau associatif JavaScript à partir d'un tableau Twig :
<script type="text/javascript">
 const monTableauJs = JSON.parse(");
 for (const maLigneJs in monTableauJs) {
 console.log(maLigneJs);
 console.log(monTableauJs[maLigneJs]);
</script>
Modification.
Pour ajouter une ou plusieurs lignes à un tableau, utiliser "merge()" :
Lecture.
Pour savoir si une variable est un tableau :
 if my_array is iterable
Pour savoir si un tableau est vide, utiliser "empty" comme pour les chaines de caractères. Par exemple pour savoir si un tableau est vide ou null :
 my_array is empty
Pour savoir si un élément est dans un tableau :
 my_item in my_array
Pour savoir si un élément n'est pas dans un tableau :
 my_item not in my_array
Pour savoir si un élément est dans les clés d'un tableau :
 my_item in my_array|keys
Pour filtrer le tableau, utiliser "filter". Par exemple pour savoir si un tableau multidimensionnel a ses sous-tableaux vides :
 my_array|filter(v => v is not empty) is empty
Précédence des opérateurs.
Du moins au plus prioritaire :
Pour afficher la valeur NULL dans un opérateur ternaire, il faut la mettre entre apostrophes :
Filtres.
Les filtres fournissent des traitements sur une expression, si on les place après elle séparés par des pipes. Par exemple :
Variables spéciales.
Pour obtenir la route d'une page : codice_1
L'URL courante : codice_1
La page d'accueil du site Web : codice_53
codice_54 renvoie la valeur de APP_ENV.
Gestion des espaces.
spaceless.
Un Twig bien formaté ne correspond pas forcément au rendu qu'il doit apporter. Pour supprimer les espaces du formatage dans ce rendu :
 <b>
 Hello World!
 </b>
NB : en Twig < 2.7, c'était : 
 <b>
 Hello World!
 </b>
Par ailleurs, il existe un filtre |spaceless.
De plus, on peut apposer le symboles "-" aux endroits où ignorer les espacements (dont retours chariot) du formatage :
 {%- ... %} World!
Cela fonctionne aussi entre codice_1.
Utilisation du traducteur.
Configuration.
Le module de traduction Symfony s'installe avec :
 composer require translator
Quand une page peut apparaitre dans plusieurs langues, inutile d'injecter la locale dans le Twig depuis le contrôleur PHP, c'est une variable d'environnement que l'on peut récupérer avec :
Le fichier YAML contenant les traductions dans cette langue sera automatiquement utilisé s'il est placé dans le dossier "translations" apparu lors de l'installation. En effet, il est identifié par le code langue ISO de son suffixe (ex : le Twig de la page d'accueil pourra être traduit dans "homepage.fr.yml", "homepage.en.yml", etc.).
Pour définir le préfixe des YAML auquel un Twig fera appel, on le définit sans suffixe en début de fichier Twig :
Par ailleurs, la commande PHP pour lister les traductions les traductions d'une langue est :
php bin/console debug:translation en --only-unused // Pour les inutilisées
php bin/console debug:translation en --only-missing // Pour les manquantes
Filtre trans.
Une fois la configuration effectuée, on peut apposer le filtre codice_56 aux textes traduis dans le Twig.
Parfois, il peut être utile de factoriser les traductions de plusieurs Twig dans un seul YAML. Pour piocher dans un YAML qui n'est pas celui par défaut, il suffit de le nommer en second paramètre du filtre codice_56 :
Si une variable doit apparaitre dans une langue différente de celle de l'utilisateur, on le précisera dans le troisième paramètre du filtre codice_56 :
Si le YAML doit contenir une variable, on la place entre pourcentages pour la remplacer en Twig avec le premier paramètre du filtre codice_56 :
Opération trans.
Il existe aussi une syntaxe alternative au filtre. Par exemple les deux paragraphes ci-dessous sont équivalents :
 punctuation_separator
De plus, on peut injecter une variable avec "with". Voici deux équivalents :
Méthodes PHP appelables en Twig.
En PHP, on peut définir des fonctions invocables en Twig, sous forme de fonction ou de filtre selon la méthode parente surchargée. Exemple :
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class TwigExtension extends AbstractExtension
 public function getFilters(): array
 return [
 new TwigFilter('getPrice', [$this, 'getPrice']),
 public function getFunctions(): array
 return [
 new TwigFunction('getPrice', [$this, 'getPrice']),
 public function getPrice($value): string
 return number_format($value, 2, ',', ' ') . '&nbsp;€';
Héritages et inclusions.
extends.
Si une fichier appelé doit être inclus dans un tout, il doit en hériter avec le mot codice_60. Le cas typique est celui d'une "base.html.twig" qui contient l'en-tête et le pied de page HTML commun à toutes les pages d'un site. Ex :
Il est possible de surcharger totalement ou en partie les blocs du template parent. Exemple depuis le template qui hérite :
 Mon en-tête qui écrase le parent
 Mon pied de page qui complète le parent
include.
À contrario, si un fichier doit en inclure un autre (par exemple pour qu'un fragment de vue soit réutilisable dans plusieurs pages), on utilise le mot codice_61. Ex :
En lui injectant des paramètres :
render_esi.
Inclus un Twig avec le cache .
embed.
Enfin, codice_62 combine les deux précédentes fonctions :
import.
codice_63 récupère certaines fonctions d'un fichier en contenant plusieurs :
Macros.
Les macros sont des fonctions globales, appelables depuis un fichier Twig.
Exemple :
 &nbsp;
Exemples.
 <ul id="navigation">
 <li>
 <a href="">
 </a>
 </li>
 </ul>
Pour ne pas qu'un bloc hérité écrase son parent, mais l'incrémente plutôt, utiliser :
Bonnes pratiques.
Les noms des fichiers .twig doivent être rédigés en snake_case.

Fonctionnement d'un ordinateur/Architecture à parallèlisme de données