Cos’è un motore di template
Un motore di template è uno strumento che permette di generare contenuti dinamici (come pagine HTML) combinando struttura fissa e dati variabili in modo semplice e leggibile
Un motore di template viene utilizzato per:
- Separare la logica (PHP, Python, ecc.) dalla presentazione (HTML, CSS)
- Rendere il codice più manutenibile, riutilizzabile e pulito
- Evitare di scrivere HTML direttamente dentro il codice backend
Come funziona:
- Il template viene preparato con dei segnaposto (es.
{{ nome }}) - Il motore sostituisce i segnaposto con i dati reali
- Il risultato è una pagina HTML pronta da mostrare all’utente
Cos’è Blade
Blade è il motore di template integrato in Laravel, progettato per rendere la scrittura di HTML dinamico semplice, elegante e leggibile.
Le caratteristiche principali di Blade sono:
- Direttive intuitive: usa
@if,@foreach,@include,@extendsper gestire logica e layout - Layout e sezioni: puoi creare template base con
@extendse definir sezioni con@sectione@yield - Sicurezza automatica: le variabili sono automaticamente escape-ate per prevenire XSS
- Componenti riutilizzabili: puoi creare componenti Blade personalizzati per strutture ripetitive
Esempio
@if($user->isAdmin())
<p>Benvenuto, amministratore!</p>
@else
<p>Accesso limitato.</p>
@endif
Le direttive Blade
Le direttive Blade sono comandi speciali che iniziano con @ e permettono di scrivere logica PHP semplificata direttamente nei file .blade.php. Di seguito un elenco.
Controlli di flusso
| Direttiva | Descrizione |
|---|---|
@if, @elseif, @else, @endif | Condizioni logiche |
@unless | Inverso di @if |
@isset, @endisset | Verifica se una variabile è settata |
@empty, @endempty | Verifica se una variabile è vuota |
@switch, @case, @break, @default, @endswitch | Switch-case |
Cicli
| Direttiva | Descrizione |
|---|---|
@for, @endfor | Ciclo for classico |
@foreach, @endforeach | Ciclo foreach |
@forelse, @empty, @endforelse | Ciclo con fallback se vuoto |
$loop | Oggetto con info sul ciclo ($loop->index, $loop->last, ecc.) |
Layout e sezioni
| Direttiva | Descrizione |
|---|---|
@extends('layout') | Estende un layout base |
@section('nome'), @endsection@hasSection() … @endif@SectionMissing() … @endif | Definisce una sezione |
@yield('nome') | Inserisce una sezione |
@include('view') | Include una view parziale |
@includeIf, @includeWhen, @includeUnless | Include condizionato |
@each('view', $items, 'item') | Include una view per ogni elemento |
@stack, @push, @endpush | accumulo di contenuti in un punto preciso del layout principale |
Autenticazione e ruoli
| Direttiva | Descrizione |
|---|---|
@auth, @endauth | Se l’utente è autenticato |
@guest, @endguest | Se l’utente è ospite |
@can, @cannot, @endcan | Controllo autorizzazioni |
Sicurezza e form
| Direttiva | Descrizione |
|---|---|
@csrf | Token CSRF per i form |
@method('PUT') | Spoofing del metodo HTTP |
@error('campo'), @enderror | Mostra errori di validazione |
Session e Context
| Direttiva | Descrizione |
|---|---|
@session , @endsession | determina se esiste un valore di sessione |
@context, @endcontext | determina se esiste un context |
Altre utili
| Direttiva | Descrizione |
|---|---|
@php, @endphp | Blocchi di codice PHP puro |
@json($var) | Converte in JSON |
@dd($var) | Dump & Die (debug) |
@dump($var) | Solo dump (senza terminare) |
{{-- commento --}} | Commento Blade (non visibile nel sorgente HTML |
Le variabili speciali di Blade
In Blade, ci sono alcune variabili speciali che Laravel mette a disposizione automaticamente all’interno di cicli e contesti specifici. Ecco le più importanti e usate.
$loop — nei cicli @foreach, @forelse
Questa variabile ti dà informazioni sullo stato del ciclo corrente:
| Proprietà | Descrizione |
|---|---|
$loop->index | Indice corrente (parte da 0) |
$loop->iteration | Iterazione corrente (parte da 1) |
$loop->remaining | Elementi rimanenti dopo quello corrente |
$loop->count | Numero totale di elementi nel ciclo |
$loop->first | true se è il primo elemento |
$loop->last | true se è l’ultimo elemento |
$loop->even | true se l’indice è pari |
$loop->odd | true se l’indice è dispari |
$loop->depth | Profondità del ciclo (utile nei cicli annidati) |
$loop->parent | Riferimento al ciclo padre (nei cicli annidati) |
$errors — per la validazione dei form
Contiene gli errori di validazione:
@error('email')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
$messageè una variabile speciale disponibile solo dentro@error
$auth, $user — per l’autenticazione
Se usi @auth, puoi accedere a:
@auth
<p>Benvenuto {{ auth()->user()->name }}</p>
@endauth
$attributes — nei componenti Blade
Usato per gestire gli attributi HTML passati a un componente:
<div {{ $attributes->merge(['class' => 'card']) }}>
<!-- contenuto -->
</div>
$value in sessione
Se usi @session puoi usare $value per visualizzare il valore della sessione.
Escape delle variabili
L’escape delle variabili è un meccanismo di sicurezza che serve a proteggere la tua applicazione da attacchi XSS (Cross-Site Scripting).
Quando Blade “escapa” una variabile, trasforma i caratteri HTML speciali in entità sicure, impedendo che vengano interpretati come codice dal browser.
{{ ... }} — Escape automatico (sicuro)
- Esegue l’escape dei caratteri HTML per prevenire attacchi XSS (Cross-Site Scripting)
- Utile per mostrare testo utente o variabili non HTML
{{ $titolo }}
Se $titolo = "<script>alert('ciao')</script>", il risultato sarà:
<script>alert('ciao')</script>
Sicuro, ma non interpreta HTML
{!! ... !!} — Output non escape-ato (grezzo)
- Non esegue l’escape: il contenuto viene interpretato come HTML puro
- Utile solo se sei sicuro che il contenuto sia affidabile
{!! $contenutoHtml !!}
Se $contenutoHtml = "<strong>Ciao</strong>", il risultato sarà:
<strong>Ciao</strong>
Attenzione: se $contenutoHtml contiene codice malevolo, verrà eseguito nel browser
Regola d’oro
Usa {{ }} per tutto ciò che proviene da input utente o fonti non controllate. Usa {!! !!} solo per HTML sicuro e controllato (es. snippet da admin, CMS, ecc.)

0 commenti