> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Trait Dumpable

> Come aggiungere dump() / dd() a una classe qualsiasi con Illuminate\Support\Traits\Dumpable e fare debug senza spezzare le catene.

## 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.

```mermaid theme={null}
flowchart TD
    A["Chiama dump()/dd() su un oggetto"] --> B{"Quale dei due?"}
    B -- "dump()" --> C["Stampa $this e gli argomenti aggiuntivi"]
    C --> D["Continua l'esecuzione"]
    B -- "dd()" --> E["Stampa $this e gli argomenti aggiuntivi"]
    E --> F["Termina l'esecuzione"]
```

## Analisi dell'implementazione

L'implementazione è molto semplice: chiama solo `dump($this, ...$args)` e `dd($this, ...$args)`.

```php theme={null}
trait Dumpable
{
    public function dump(...$args): static
    {
        dump($this, ...$args);
        return $this;
    }

    public function dd(...$args): never
    {
        dd($this, ...$args);
    }
}
```

<Info>
  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`.
</Info>

## Usarlo nelle tue classi

Basta aggiungere `use Dumpable;` per avere `dump()` / `dd()` come metodi d'istanza.

```php theme={null}
use Illuminate\Support\Traits\Dumpable;

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

$user = new UserData('Taro', 'taro@example.com');

$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.

```php theme={null}
$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.

<Steps>
  <Step title="Aggiungerlo a un Value Object / DTO">
    ```php theme={null}
    use Illuminate\Support\Traits\Dumpable;

    final class InvoiceData
    {
        use Dumpable;

        public function __construct(
            public readonly string $number,
            public readonly int $total,
        ) {}
    }
    ```
  </Step>

  <Step title="Verificare a metà di un Fluent Builder">
    ```php theme={null}
    $payload = (new PackageRequestBuilder)
        ->forUser($userId)
        ->withLocale('ja')
        ->dump('before send')
        ->toArray();
    ```
  </Step>
</Steps>

## Passare argomenti aggiuntivi

Internamente `Dumpable` chiama `dump($this, ...$args)` / `dd($this, ...$args)`, così puoi stampare informazioni di contesto insieme all'oggetto.

```php theme={null}
$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

<Columns cols={3}>
  <Card title="Helper tap() / Tappable" icon="hand-point-up" href="/it/advanced/tap">
    Impara il pattern per applicare side effect restituendo comunque il valore.
  </Card>

  <Card title="Trait Conditionable" icon="git-branch" href="/it/advanced/conditionable">
    Impara a diramare condizionalmente le catene di elaborazione.
  </Card>

  <Card title="Trait Macroable" icon="puzzle-piece" href="/it/advanced/macroable">
    Impara a estendere classi esistenti aggiungendo metodi personalizzati.
  </Card>
</Columns>


## Related topics

- [Support Contracts (Arrayable / Jsonable / Htmlable / Responsable)](/it/advanced/support-contracts.md)
- [Trait Conditionable](/it/advanced/conditionable.md)
- [Trait Macroable](/it/advanced/macroable.md)
- [SessionEvent](/it/packages/laravel-copilot-sdk/session-event.md)
- [Eloquent Bootable Traits](/it/advanced/eloquent-bootable-traits.md)
