Guide galattiche per aspiranti programmatori

sviluppatore php seduto alla scrivania a lavorare al pc
Lezione 25 / 33

I template con Twig

Che cos’è Twig?

Twig è un template engine flessibile e potente per il linguaggio PHP. È stato progettato per essere sia veloce che sicuro, offrendo una sintassi chiara e concisa. Twig separa la logica di presentazione dalla logica applicativa permettendo agli sviluppatori php e ai web designer di lavorare in parallelo e in maniera indipendente.

 

Caratteristiche principali di Twig:

  • Facile: Twig ha una sintassi specifica per i template che è sia leggibile che espressiva. Questo rende i template facili da scrivere e da comprendere anche per i web designer.
  • Estensibile: Twig è altamente estensibile. Gli sviluppatori possono aggiungere funzionalità personalizzate attraverso estensioni, permettendo a Twig di adattarsi a una vasta gamma di esigenze e contesti.
  • Sicuro: una delle principali preoccupazioni quando si lavora con i template è la sicurezza. Twig offre meccanismi come l’escaping automatico per prevenire attacchi di tipo script injection.
  • Veloce: Twig compila i template in codice PHP plain, il che significa che, una volta compilati, i template sono estremamente veloci e efficienti.
  • Separazione delle responsabilità: Twig promuove una chiara separazione tra la logica di presentazione e la logica applicativa. Questo non solo rende il codice più pulito e manutenibile, ma facilita anche la collaborazione tra sviluppatori e designer.
  • Ben documentato: Ogni caratteristica di Twig è documentata e disponibile sul sito ufficiale 

 

Twig rappresenta una soluzione potente per la gestione dei template in PHP. Con la sua sintassi chiara, le prestazioni ottimizzate e l’attenzione alla sicurezza, Twig offre agli sviluppatori uno strumento robusto e flessibile per la creazione di view dinamiche.

Come utilizzare Twig

I file dei template Twig sono localizzati di default all’interno della cartella templates/. Tale configurazione è definita all’interno del file di twig.yaml:

 

twig:
    default_path: '%kernel.project_dir%/templates'

Gli elementi di Twig sono separati dal resto del template tramite l’utilizzo dei delimitatori:

 

  • {{ … }} utilizzato per stampare il contenuto di una variabile o il risulato di una espressione
  • {% … %} utilizzato per racchiudere logica come strutture condizionali e cicli
  • {# … #} utilizzato per l’inclusione di commenti all’interno del template. Tali commenti, non verranno renderizzati nell’output finale.

 

Symfony raccomanda le seguenti convenzioni per il naming di file e cartelle relative ai template:

  • utilizzare lo stile snake case (underscore _ al posto degli spazi) per i nomi di file e cartelle. Esempio: blog/lista_articoli.html.twig
  • definire due estensioni per i nomi dei file dove la prima è l’estensione che il template dovrà generare (es. HTML) e la seconda è twig. Esempio: index.html.twig

Variabili in Twig

Per accedere ad una variabile in Twig è sufficiente utilizzare la sintassi

{{ nome_variabile }}

Se una variabile è un oggetto si può accedere ai suoi attributi utilizzando la dot notation ‘.’. In caso di array, invece, si possono utilizzare le parentesi quadre ‘[]’

 

{{ prodotto.nome }}
{{ prodotti[0].nome }}

In Twig è anche possibile definire una variabile lato template utilizzando la sintassi

 

{% set nome_variabile = "Valore" %}

Ad esempio, per definire una variabile tipo_utente con dentro il valore stringa admin è sufficiente l’istruzione seguente

 

{% set tipo_utente = "admin" %}

Strutture di controllo in Twig

Il costrutto if in Twig

Il costrutto if in Twig è simile a quello presente nel linguaggio PHP.

Per valutare una variabile contenente un valore booleano, consideriamo questo semplice esempio:

 

{% if autenticato == false %}
    <p>Accedi al sistema per proseguire.</p>
{% endif %}

In Twig è possibile anche valutare se un array ha almeno un elemento:

 

{% if utenti %}
   .
   .
   .
{% endif %}

Per valutare più rami condizionali e creare costrutti if più complessi è possibile usare elseif ed else, proprio come in PHP:

 

{% if carburante > 30 }
   Hai il pieno di carburante
{% elseif carburante > 15}
   Hai più di metà pieno di carburante
{% elseif carburante > 5}
   Rimangono solo {{ carburante }} litri di carburante
{% else %}
   Sei in riserva!
{% endif %}

Il costrutto for in Twig

Con for è possibile ciclare gli elementi di un array. Ad esempio, per stampare il nome di ogni prodotto contenuto nell’array prodotti è sufficiente scrivere le seguenti istruzioni:

 

{% for prodotto in prodotti %}
   {{ prodotto.nome }}
{% endfor %}

All’interno di ogni blocco iterativo è possibile accedere ad una serie di variabili speciali:

  • loop.index: l’indice dell’elemento corrente (partendo da 1)
  • loop.index0: l’indice dell’elemento corrente (partendo da 0)
  • loop.revindex : il numero di iterazioni rimanenti (partendo da 1)
  • loop.revindex0: il numero di iterazioni rimanenti (partendo da 0)
  • loop.first: true se è la prima iterazione
  • loop.last: true se è l’ultima iterazione
  • loop.length: il numero totale degli elementi nell’array
  • loop.parent: presente solo all’interno di un ciclo annidato. Fornisce l’accesso all’oggetto loop del ciclo superiore.

 

Con Twig è possibile iterare, oltre che sui valori, anche sulle chiavi dell’array:

 

{% for key, prodotto in prodotti %}
   {{ key }}: {{ prodotto.nome }}
{% endfor %}

Filtri in Twig

I filtri in Twig permettono di modificare e formattare i valori delle variabili prima di visualizzarle. La sintassi per l’utilizzo di un filtro è la seguente

 

{{ variabile|filtro }}

Affianco alla variabile si aggiunge il simbolo “|” chiamato pipe e, successivamente, si indica il filtro che si vuole utilizzare. I filtri possono anche essere concatenati per applicare più trasformazioni in sequenza.

 

Sul sito ufficiale è consultabile la lista completa dei filtri.

Di seguito analizzeremo alcuni dei filtri più comuni disponibili in Twig.

 

Il filtro upper in Twig

Il filtro upper in Twig converte una stringa in maiuscolo

{{ 'hello'|upper }}

Risultato: HELLO

Il filtro lower in Twig

Il filtro lower in Twig converte una stringa in minuscolo

{{ 'HELLO'|lower }}

Risultato: hello

Il filtro date in Twig

Il filtro date in Twig formatta una data in un formato specifico

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

Risultato: 11/10/2023

Il filtro length in Twig

Il filtro length in Twig restituisce la lunghezza di una stringa o di un array

{{ 'hello'|length }}

Risultato: 5

Il filtro slice in Twig

Il filtro slice in Twig estrae una porzione di stringa o array

 

{{ 'hello world'|slice(0,5) }}

Risultato: hello

Funzioni in Twig

Oltre ai filtri, Twig offre una serie di funzioni che possono essere utilizzate per eseguire operazioni specifiche all’interno dei template. Le funzioni sono simili ai filtri, ma vengono invocate in modo diverso e spesso restituiscono valori piuttosto che trasformare dati esistenti. Per invocare una funzione è sufficiente utilizzare una sintassi simile a quella delle funzioni in molti linguaggi di programmazione:

 

{{ nome_funzione(argomento1, argomento2, ...) }}

Analogamente a quanto detto per i filtri, anche la lista completa delle funzioni in Twig è consultabile sul sito ufficiale. 

Di seguito analizzeremo alcune funzioni presenti in Twig.

La funzione range in Twig

La funzione range in Twig restituisce una lista contenente una progressione aritmetica di numeri interi

 

{% for i in range(1, 5) %}
    {{ i }},
{% endfor %}

Risultato: 12345

La funzione dump in Twig

La funzione dump in Twig è molto utile in fase di debug, permette di stampare informazioni su una specifica variabile

 

 {{ dump(prodotto) }}

Risultato

 

array:3 [
	"nome" => "Pizza Margherita"
	...
]

La funzione date in Twig

La funzione date in Twig permette di estrarre e manipolare la data corrente e di convertire una stringa in una data per effettuare comparazioni.

 

{% if date(prodotto.data_creazione) < date('-3days') %}
    .
    .
    .
{% endif %}

Nell’esempio precedente, viene confrontata la data di creazione di un prodotto con la data di tre giorni fa.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.

Contattaci senza impegno per informazioni sul corso

Pagamento rateale

Valore della rata: A PARTIRE DA 112 €/mese.

Esempio di finanziamento  

Importo finanziato: € 2440 in 24 rate da € 112 – TAN fisso 9,37% TAEG 12,57% – importo totale del credito € 2788,68.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/07/2023 al 31/12/2023.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 183 €/mese.

Esempio di finanziamento 

Importo finanziato: € 3990 in 24 rate da € 183 – TAN fisso 9,37% TAEG 12,57% – importo totale del credito € 4496,56.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/07/2023 al 31/12/2023.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.