Vai al contenuto principale

Cos’è il trait Dumpable

Illuminate\Support\Traits\Dumpable è un piccolo trait che aggiunge dump() e dd() a una classe qualsiasi. Introdotto in Laravel 10, è largamente utilizzato dal core di Laravel — Collection, Eloquent Builder, Request — per unificare l’esperienza di debug. L’obiettivo è semplice: ispezionare un oggetto come farebbe var_dump e, se necessario, interrompere l’esecuzione sul posto.

Analisi dell’implementazione

L’implementazione è molto semplice: chiama solo dump($this, ...$args) e dd($this, ...$args).
trait Dumpable
{
    public function dump(...$args): static
    {
        dump($this, ...$args);
        return $this;
    }

    public function dd(...$args): never
    {
        dd($this, ...$args);
    }
}
L’implementazione di Laravel 13 si trova in src/Illuminate/Support/Traits/Dumpable.php. La firma reale è espressa con PHPDoc come @return $this e @return never.

Usarlo nelle tue classi

Basta aggiungere use Dumpable; per avere dump() / dd() come metodi d’istanza.
use Illuminate\Support\Traits\Dumpable;

class UserData
{
    use Dumpable;
    
    public function __construct(
        public readonly string $name,
        public readonly string $email,
    ) {}
}

$user = new UserData('Taro', '[email protected]');

$user->dump(); // esegue il dump e continua
$user->dd();   // esegue il dump e termina

Inserire debug all’interno di una catena

dump() restituisce static (di fatto $this), quindi puoi inserirlo in sicurezza nel mezzo di una catena di metodi.
$result = collect([1, 2, 3])
    ->map(fn ($n) => $n * 2)
    ->dump()  // controlla il contenuto qui
    ->filter(fn ($n) => $n > 2)
    ->values();
Sostituendolo con dd(), l’esecuzione si ferma in quel punto: comodo quando vuoi verificare lo stato prima di un’elaborazione pesante successiva.

Utilizzo nello sviluppo di pacchetti

Aggiungere Dumpable ai tuoi Value Object, DTO e Builder consente agli utenti di ispezionare lo stato senza tool aggiuntivi.
1

Aggiungerlo a un Value Object / DTO

use Illuminate\Support\Traits\Dumpable;

final class InvoiceData
{
    use Dumpable;

    public function __construct(
        public readonly string $number,
        public readonly int $total,
    ) {}
}
2

Verificare a metà di un Fluent Builder

$payload = (new PackageRequestBuilder)
    ->forUser($userId)
    ->withLocale('ja')
    ->dump('before send')
    ->toArray();

Passare argomenti aggiuntivi

Internamente Dumpable chiama dump($this, ...$args) / dd($this, ...$args), così puoi stampare informazioni di contesto insieme all’oggetto.
$user->dump('punto di debug A');
// vengono stampati insieme $this e 'punto di debug A'
Utile quando usi dump() in più punti: identifichi subito da quale posizione arriva l’output.

Trait correlati

Helper tap() / Tappable

Impara il pattern per applicare side effect restituendo comunque il valore.

Trait Conditionable

Impara a diramare condizionalmente le catene di elaborazione.

Trait Macroable

Impara a estendere classi esistenti aggiungendo metodi personalizzati.
Ultima modifica il 13 luglio 2026