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

# Dumpable-trait

> Hoe je met Illuminate\Support\Traits\Dumpable dump() / dd() toevoegt aan elke klasse en debugt zonder je chain te breken.

## Wat is de Dumpable-trait?

`Illuminate\Support\Traits\Dumpable` is een kleine trait die `dump()` en `dd()` toevoegt aan een willekeurige klasse. De trait is geïntroduceerd in Laravel 10 en wordt breed gebruikt om de debugervaring binnen de Laravel-core — Collection, Eloquent Builder, Request, enzovoort — te uniformeren.

Het doel is simpel: het object bekijken zoals bij `var_dump`, en waar nodig de verwerking ter plekke stoppen.

```mermaid theme={null}
flowchart TD
    A["dump()/dd() aanroepen op het object"] --> B{"Welke is aangeroepen?"}
    B -- "dump()" --> C["$this en extra argumenten uitvoeren"]
    C --> D["Verwerking gaat door"]
    B -- "dd()" --> E["$this en extra argumenten uitvoeren"]
    E --> F["Verwerking stopt"]
```

## De implementatie bekijken

De implementatie is heel eenvoudig: er wordt alleen `dump($this, ...$args)` en `dd($this, ...$args)` aangeroepen.

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

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

<Info>
  De implementatie in Laravel 13 staat in `src/Illuminate/Support/Traits/Dumpable.php`. De werkelijke signaturen drukken `@return $this` en `@return never` uit via PHPDoc.
</Info>

## Gebruiken in je eigen klasse

Voeg alleen `use Dumpable;` toe en je kunt `dump()` / `dd()` als instantiemethodes gebruiken.

```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(); // dumpen en doorgaan
$user->dd();   // dumpen en stoppen
```

## Debuggen midden in een chain

`dump()` geeft `static` terug (in de implementatie `$this`), dus je kunt het veilig midden in een method chain gebruiken.

```php theme={null}
$result = collect([1, 2, 3])
    ->map(fn ($n) => $n * 2)
    ->dump()  // hier de inhoud bekijken
    ->filter(fn ($n) => $n > 2)
    ->values();
```

Vervang je het door `dd()`, dan stopt de verwerking op dat punt — handig wanneer je de toestand wilt bekijken vóór zware vervolgverwerking.

## Toepassing bij packageontwikkeling

Voeg je `Dumpable` toe aan je eigen value objects, DTO's en builders, dan kunnen gebruikers zonder extra tooling de toestand inspecteren.

<Steps>
  <Step title="Toevoegen aan een 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="Tussentijds inspecteren in een fluent builder">
    ```php theme={null}
    $payload = (new PackageRequestBuilder)
        ->forUser($userId)
        ->withLocale('ja')
        ->dump('before send')
        ->toArray();
    ```
  </Step>
</Steps>

## Extra argumenten doorgeven

Omdat `Dumpable` intern `dump($this, ...$args)` / `dd($this, ...$args)` aanroept, kun je contextinformatie mee laten uitvoeren.

```php theme={null}
$user->dump('debugpunt A');
// $this en 'debugpunt A' worden tegelijk uitgevoerd
```

Dat is nuttig wanneer je op meerdere plekken `dump()` gebruikt: je ziet direct op welk punt de uitvoer plaatsvond.

## Gerelateerde traits

<Columns cols={3}>
  <Card title="tap()-helper / Tappable" icon="hand-point-up" href="/nl/advanced/tap">
    Leer het patroon waarbij je bijeffecten toevoegt en toch de waarde teruggeeft.
  </Card>

  <Card title="Conditionable-trait" icon="git-branch" href="/nl/advanced/conditionable">
    Leer een ontwerp waarbij je een chain conditioneel vertakt.
  </Card>

  <Card title="Macroable-trait" icon="puzzle-piece" href="/nl/advanced/macroable">
    Leer hoe je bestaande klassen uitbreidt met eigen methodes.
  </Card>
</Columns>


## Related topics

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