User Tools

Site Tools


backend:twiguse

Twig : Utilisation

logo

Avec Symfony

Twig reçoit les données à afficher grace à la méthode render(), celle-ci peut lui transmettre des variables php, pour les utiliser il ne faudra pas mettre le $ devant.
Twig n'affiche que des chaines de caractères.

On peut utiliser la méthode dump() dans Twig

On peut appeler les méthodes de l'entity en utilisant le . après le nom de la variable :

  {% for pin in pins %}
    {{ pin.getTitle() }}
  {% endfor %}

On n'est pas obligé de mettre les () ni get, car Twig appellera les getters correspondant aux propriétés privées demandées :

  {% for pin in pins %}
    {{ pin.Title }}
  {% endfor %}

Formulaires

Twig reçoit un objet FormView de Symfony, pour pouvoir l'afficher, il faut utiliser la méthode form() qui renvoie des chaînes de caractères à partir de l'objet FormView :

{{ form(monFormulaire) }}

Boutons

On intègre les boutons de soumission de formulaire directement dans Twig, pour cela il faut créer un bloc de formulaire pour pouvoir le mettre dedans en utilisant :

  • form_start : indique le début du formulaire
  • form_end :indique la fin du formulaire
  • form_widget : contient les champs du formulaire
  {{ form_start(monFormulaire) }}
    {{ form_widget(monFormulaire) }}
    <input type="submit" value="Create Pin">
  {{ form_end(monFormulaire) }}v

Filters


Voir la documentation officielle : https://twig.symfony.com/doc/


Filters Twig
abs
batch
capitalize
column
convert_encoding
country_name
currency_name
currency_symbol
data_uri
date
date_modify
default
escape
filter
first
format
format_currency
format_date
format_datetime
format_number
format_time
html_to_markdown
inky_to_html
inline_css
join
json_encode
keys
language_name
last
length
locale_name
lower
map
markdown_to_html
merge
nl2br
number_format
raw
reduce
replace
reverse
round
slice
sort
spaceless
split
striptags
timezone_name
title
trim
u
upper
url_encode
Filters Twig Symfony
abbr_class
abbr_method
file_excerpt
file_link
file_relative
format_args
format_args_as_text
format_file
format_file_from_text
humanize
trans
transchoice
yaml_dump
yaml_encode

Les filtres s'utilisent avec {% la_variable|le_filtre %} :

{{ [1, 2, 3]|join(', ', ' and ') }}
{# retourne 1, 2 and 3 #}

On peut les enchainer :

{{ [1, 2, 3]|join(', ', ' and ')|upper }}
{# retourne 1, 2 AND 3 #}

On peut faire des tests avec ces filtres :

  {% if pins|length > 0 %}
    {% for pin in pins %}
      <article>
        <h1>{{ pin.Title }}</h1>
        <p>{{ pin.Description }}</p>
      </article>
    {% endfor %}
  {% else %}
    <p>Sorry, not pins yet !</p>
  {% endif %}

On peut utiliser la boucle for avec un else :

  {% for pin in pins %}
    <article>
      <h1>{{ pin.Title }}</h1>
      <p>{{ pin.Description }}</p>
    </article>
  {% else %}
    <p>Sorry, not pins yet !</p>
  {% endfor %}

batch

Il crée de lots avec les éléments en renvoyant une liste de listes avec le nombre d'éléments donné. Un deuxième paramètre peut être fourni et utilisé pour remplir les éléments manquants:

{% set items = ['a', 'b', 'c', 'd'] %}
 
<table>
{% for row in items|batch(3, 'No item') %}
    <tr>
        {% for column in row %}
            <td>{{ column }}</td>
        {% endfor %}
    </tr>
{% endfor %}
</table>

Cela renverra :

<table>
    <tr>
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>
    <tr>
        <td>d</td>
        <td>No item</td>
        <td>No item</td>
    </tr>
</table>

date

Il met en forme une date dans un format donné, on l'utilise comme en PHP :

{{ 'now'|date('d/m/Y') }}

On peut utiliser 'now' ou '' , on peut aussi utiliser 'yesterday' , 'tomorrow' ,…

default

Il renvoie la valeur par défaut transmise si la valeur est indéfinie ou vide, sinon la valeur de la variable:

{{ var|default('var n'est pas définie') }}
 
{{ var.foo|default('l'objet foo de var n'est pas défini') }}
 
{{ var['foo']|default('l'objet foo de var n'est pas défini') }}
 
{{ ''|default('la var passée est vide')  }}

length

Il renvoie le nombre d'éléments d'une séquence ou d'un mappage, ou la longueur d'une chaîne.

  • Pour les objets qui implémentent l'interface Countable, length utilisera la valeur de retour de la méthode count ().
  • Pour les objets qui implémentent la méthode magique __toString () (et non Countable), il renverra la longueur de la chaîne fournie par cette méthode.
  • Pour les objets qui implémentent l'interface IteratorAggregate, length utilisera la valeur de retour de la méthode iterator_count ().
{% if var|length > 10 %}
    ...
{% endif %}

trans

Il peut être utilisé pour traduire des textes variables et des expressions complexes:

{{ message|trans({'%name%': 'Fabien'}, 'app') }}

Le paramètre 'app' est appelé domaine de traduction, il permet de catégoriser les traductions

raw

Il marque la valeur comme étant «sûre», ce qui signifie que dans un environnement avec échappement automatique activé, cette variable ne sera pas échappée si raw est le dernier filtre qui lui est appliqué.

{% autoescape %}
    {{ var|raw }} {# var ne sera pas échappée #}
{% endautoescape %}

u

Il intègre un texte dans un objet Unicode (Symfony UnicodeString instance) qui expose des méthodes pour «manipuler» la chaîne :

  • Modifier la casse
  • Chercher et remplacer
  • Ajouter et préfixer
  • Joindre, diviser, tronquer et inverser
  • Nettoyer le texte

Tags


Voir la documentation officielle : Tags


Tags Twig
apply
autoescape
block
deprecated
do
embed
extends
flush
for
from
if
import
include
macro
sandbox
set
use
verbatim
with
Tags Twig Symfony
form_theme
stopwatch
trans
trans_default_domain
transchoice

Les tags s'utilisent avec {% le_tag %} :

  {% set pins_count = pins|length %}
  <h1>{{ pins_count }} Pins</h1>

Operators


Voir la documentation officielle : Operators


Operators Twig
in
is
Math (+, -, /, %, //, *, **)
Logic (and, or, not, (), b-and, b-xor, b-or)
Comparisons (==, !=, <, >, >=, ⇐, ===,
starts with, ends with, matches)
Others (.., |, ~, ., [], ?:, ??)

On peut utiliser les opérateurs ternaire et null comme en PHP.

Tests

Voir la documentation officielle : Tests


Tests Twig
constant
defined
divisibleby
empty
even
iterable
null
odd
sameas
Tests Twig Symfony
rootformselectedchoice

Functions


Voir la documentation officielle : Functions


Functions Twig
attribute
block
constant
country_timezones
cycle
date
dump
html_classes
include
max
min
parent
random
range
source
template_from_string
Functions Twig Symfony
absolute_url
asset
asset_version
controller
csrf_token
expression
form
form_end
form_errors
form_help
form_label
form_rest
form_row
form_start
form_widget
is_granted
logout_path
logout_url
path
relative_path
render
render_esi
url

Elles fonctionnent comme les foncitons en PHP.

Exemples de fonctions

dump()

Pour dumper une variable.

parent()

Permet d'accéder à la valeur de la variable parent en cas d'héritage, ici on utilise parent() pour récupérer le texte du block title du fichier layouts/base.html.twig :

{% extends 'layouts/base.html.twig' %}
{% block title %} "A propos | " {{ parent() }} {% endblock %}

On peut aussi l'écrire :

{% extends 'layouts/base.html.twig' %}
{% block title "A propos | " ~ parent() %}

path()

Elle prend en paramètre un nom de route et elle génère le chemin relatif associé. ON peut lui donnéer des paramètres pour les routes dynamiques par exemple :

<a href="{{ path('app_pins_show', {'id': pin.id}) }}">{{ pin.Title }}</a>

On n'est pas obligé de mettre les ' pour id :

<a href="{{ path('app_pins_show', {id: pin.id}) }}">{{ pin.Title }}</a>

random()

Renvoie une valeur aléatoire

set()

Defini une variable

url()

Génère une URL absolue

Création de fonction : make:twig-extension

On peut créer nos propres fonctions. Pour cela, il faut utiliser :

symfony console make:twig-extension

Lorsque l'extension est créée, 1 fichier est créé :
src\Twig\MonExtension.php

Dans ce fichier, il faut définir l'extension dans la méthode getFunctions :

public function getFunctions(): array
{
  return [
    new TwigFunction('set_active_route', [$this, 'setActiveRoute']),
  ];
}

Puis il faut définir cette nouvelle méthode en-dessous :

public function setActiveRoute(string $route, ?string $activeClass = 'active'): string
{
  $currentRoute = $this->requestStack->getCurrentRequest()->attributes->get('_route');
  return $currentRoute === $route ? $activeClass : '';
}

On peut également créer des filtres.

Messages d'erreurs

Authetification

Affichage des messages

Lors d'une tentative d'authentification, Symfony peut renvoyer le paramètre error à un template. Pour récupérer le message d'erreur il faut utiliser : error.messageKey :

{{ error.messageKey }}

Personnalisation des messages

Modification des méthodes

On peut modifier directement les méthodes dans Symfony pour avoir des messages personnalisés (voir Symfony : Personnalisation des messages)

Utilisation de la traduction

Il faut utiliser le filtre |trans et configurer le fichier YAML correspondant dans translations :

{{ error.messageKey|trans(error.messageData, 'security') }}

Fichier translations\security.en.yaml :

'Invalid credentials': 'Indentifiants invalides'
backend/twiguse.txt · Last modified: 2020/09/16 10:35 (external edit)