Blade: il motore di template di Laravel

Blade è il motore di template di Laravel: usa direttive come @if e @foreach per creare HTML dinamico in modo semplice, sicuro e leggibile.
immagine dell'autore dell'articolo

Scritto da: Alberto

Una vita nell'informatica, per lavoro e per passione.
agsdix-far fa-calendar-alt
Data pubblicazione: 5 Novembre 2025
Categorie: Laravel
agsdix-far fa-comments

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:

  1. Il template viene preparato con dei segnaposto (es. {{ nome }})
  2. Il motore sostituisce i segnaposto con i dati reali
  3. 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, @extends per gestire logica e layout
  • Layout e sezioni: puoi creare template base con @extends e definir sezioni con @section e @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

DirettivaDescrizione
@if, @elseif, @else, @endifCondizioni logiche
@unlessInverso di @if
@isset, @endissetVerifica se una variabile è settata
@empty, @endemptyVerifica se una variabile è vuota
@switch, @case, @break, @default, @endswitchSwitch-case

Cicli

DirettivaDescrizione
@for, @endforCiclo for classico
@foreach, @endforeachCiclo foreach
@forelse, @empty, @endforelseCiclo con fallback se vuoto
$loopOggetto con info sul ciclo ($loop->index, $loop->last, ecc.)

Layout e sezioni

DirettivaDescrizione
@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, @includeUnlessInclude condizionato
@each('view', $items, 'item')Include una view per ogni elemento
@stack, @push, @endpushaccumulo di contenuti in un punto preciso del layout principale

Autenticazione e ruoli

DirettivaDescrizione
@auth, @endauthSe l’utente è autenticato
@guest, @endguestSe l’utente è ospite
@can, @cannot, @endcanControllo autorizzazioni

Sicurezza e form

DirettivaDescrizione
@csrfToken CSRF per i form
@method('PUT')Spoofing del metodo HTTP
@error('campo'), @enderrorMostra errori di validazione

Session e Context

DirettivaDescrizione
@session , @endsessiondetermina se esiste un valore di sessione
@context, @endcontextdetermina se esiste un context

Altre utili

DirettivaDescrizione
@php, @endphpBlocchi 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->indexIndice corrente (parte da 0)
$loop->iterationIterazione corrente (parte da 1)
$loop->remainingElementi rimanenti dopo quello corrente
$loop->countNumero totale di elementi nel ciclo
$loop->firsttrue se è il primo elemento
$loop->lasttrue se è l’ultimo elemento
$loop->eventrue se l’indice è pari
$loop->oddtrue se l’indice è dispari
$loop->depthProfondità del ciclo (utile nei cicli annidati)
$loop->parentRiferimento 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à:

&lt;script&gt;alert('ciao')&lt;/script&gt;

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