Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Filtri, funzioni e gestione dei template con Twig

Variabili e logiche di controllo non sono i soli strumenti di Twig. La libreria offre anche filtri, funzioni e operatori per gestire le pagine di un'App
Variabili e logiche di controllo non sono i soli strumenti di Twig. La libreria offre anche filtri, funzioni e operatori per gestire le pagine di un'App
Link copiato negli appunti

Variabili e logiche di controllo introdotti nel capitolo precedente non sono i soli strumenti messi a disposizione da Twig. La duttilità della libreria è data anche da filtri, da funzioni, da operatori e, soprattutto, dalla semplicità con cui possiamo gestire le pagine della nostra applicazione.

Filtri

Un'altra caratteristica essenziale di Twig è la possibilità di utilizzare dei filtri, anche in maniera concatenata. Questo significa che, dato un valore, possiamo modificare l'output da mostrare all'interno della stessa riga mantenendo il codice leggibile. Per capire i vantaggi che offrono i filtri vediamo un esempio di codice PHP:

$fruits = ['orange', 'apple', 'kiwi', 'banana'];
sort($fruits);
$string = '';
foreach ($fruits as $index => $fruit) {
    if (($index + 1) === \count($fruits)) {
        $string = substr($string, 0, -2); //remove the comma
        $string .= ' and ' . $fruit;
        break;
    }
    $string .= $fruit . ', ';
}
echo $string;

Nel codice appena visto, dato un array non ordinato di frutti, vorremmo mostrarli in una stringa separati da virgola tranne nell'ultimo elemento in cui vorremmo sostituire la virgola con la parola and per rendere il tutto più leggibile. Non è nulla di complesso ma è molto verboso perché ci sono diversi controlli da effettuare. La stessa cosa è realizzabile con Twig con il seguente codice che oltre ad essere più leggibile è anche molto più veloce da scrivere.

{% set fruits = ['orange', 'apple', 'kiwi', 'banana'] %}
{{ fruits | sort | join(', ', ' and ') }}

I filtri sono divisi attraverso il carattere | e si leggono da sinistra verso destra. Ce ne sono di ogni genere: per manipolare array, stringhe, date, url, ecc.

Funzioni

Le funzioni sono simili ai filtri ma vengono richiamate nella modalità classica in cui siamo abituati anche in PHP. La differenza sostanziale tra filtro e funzione è che i filtri vengono utilizzati per modificare il valore di output mentre le funzioni vengono utilizzate per attività leggermente più complesse della semplice trasformazione di un valore.

Un esempio utile di funziona è il dump con cui si può far stampare a schermo il contenuto di una variabile.

La funzione è disponibile solo negli ambienti di dev e test. Bisogna infatti prestare molta attenzione a non mettere in produzione del codice contenente una chiamata alla funzione poiché otterremo un errore.

{{ dump(user) }}
array:2 [▼
	"firstName" => "Simone"
	"lastName" => "D'Amico"
]

Anche in questo caso ce ne sono di molto utili ma le introdurremo pian piano che le utilizzeremo nel progetto.

Operatori

Alcuni degli operatori più utili in Twig sono:

{% if user.firstName is defined %} {# verifica che una variabile o una proprietà sia definita #}
{% if var is empty %}              {# verifica che la variabile non sia vuota (es. stringa vuota o array vuoto #}
{% if var is null %}               {# verifica che la variabile sia nulla #}
{% if var is not null %}           {# l'opposto della precedente, verifica che la variabile non sia nulla #}
{% if var is odd %}                {# verifica che la variabile sia dispari #}
{% if var is even %}               {# verifica che la variabile sia pari #}

Gestire i template con Twig

Finora abbiamo visto come utilizzare la libreria all'interno di un template ma ancora non abbiamo introdotto nulla in merito alla gestione dei template stessi. Abbiamo detto che Twig è in grado di gestire anche l'ereditarietà dei template e di evitare la duplicazione di codice, vediamo ora come.

Se guardiamo il contenuto del file app/templates/base.html.twig noteremo che ci sono diversi punti in cui utilizziamo dei blocchi:

<title>{% block title %}Welcome!{% endblock %}</title>

Il blocco può essere considerato come un wrapper che comunica alla libreria che i template che estenderanno quello base possono sovrascriverne il contenuto. Un blocco infatti può avere del contenuto di default come il blocco titolo ma può essere facilmente sovrascritto da eventuali template che lo estendono.

Apriamo il template della home page creato qualche lezione fa app/templates/home/index.html.twig:

{% extends 'base.html.twig' %}
{% block body %}
  <h1>Questa sarà la nostra home page!</h1>
{% endblock %}

Innanzitutto notiamo subito che c'è un tag extend che definisce qual è il template padre che andiamo ad estendere e personalizzare. Nel nostro caso è esattamente il template base di cui sopra. Subito dopo definiamo il tag body in cui inseriamo il testo che vogliamo mostrare in home page. Oltre al tag body noi possiamo personalizzare qualsiasi altro body dichiarato nel template base, incluso il title:

{% block title %}Sei in home page!{% endblock %}

Se aggiungiamo questa porzione di codice nel file e ricarichiamo la pagina noteremo che l'attributo title della pagina contiene esattamente la stringa da noi inserita.

Attraverso i blocchi e l'extend possiamo personalizzare i nostri template senza la necessità di dover riscrivere tutto il codice HTML per ogni pagina. Questo ci consente di avere dei file dedicati per header, footer, menù, ecc. senza bisogno di doverli richiamare su ogni template consentendoci di concentrarci sul contenuto della pagina.

Ti consigliamo anche