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

> Ajoutez dump() / dd() à n'importe quelle classe avec Illuminate\Support\Traits\Dumpable et déboguez sans casser vos chaînes.

## Qu'est-ce que le trait Dumpable

`Illuminate\Support\Traits\Dumpable` est un petit trait qui ajoute `dump()` et `dd()` à n'importe quelle classe. Introduit dans Laravel 10, il est largement utilisé au sein du cœur de Laravel (Collection, Eloquent Builder, Request, etc.) pour uniformiser l'expérience de débogage.

L'objectif est simple : inspecter un objet à la manière de `var_dump` et, si besoin, arrêter le traitement sur place.

```mermaid theme={null}
flowchart TD
    A["Appel de dump()/dd() sur un objet"] --> B{"Lequel est appelé ?"}
    B -- "dump()" --> C["Affiche $this et les arguments supplémentaires"]
    C --> D["Poursuit le traitement"]
    B -- "dd()" --> E["Affiche $this et les arguments supplémentaires"]
    E --> F["Arrête le traitement"]
```

## Vérifier l'implémentation

L'implémentation est très simple : elle se contente d'appeler `dump($this, ...$args)` et `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'implémentation Laravel 13 se trouve dans `src/Illuminate/Support/Traits/Dumpable.php`. Les signatures réelles expriment `@return $this` et `@return never` en PHPDoc.
</Info>

## Utilisation dans votre propre classe

En ajoutant simplement `use Dumpable;`, vous obtenez `dump()` / `dd()` comme méthodes d'instance.

```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(); // dump et poursuit
$user->dd();   // dump et arrête
```

## Insérer un debug au milieu d'une chaîne

Comme `dump()` retourne `static` (en pratique `$this`), vous pouvez l'utiliser sans risque au milieu d'une chaîne de méthodes.

```php theme={null}
$result = collect([1, 2, 3])
    ->map(fn ($n) => $n * 2)
    ->dump()  // Vérifier le contenu ici
    ->filter(fn ($n) => $n > 2)
    ->values();
```

En remplaçant par `dd()`, le traitement s'arrête à ce point : pratique lorsque vous voulez inspecter l'état avant un traitement lourd qui suit.

## Utilisation dans le développement de packages

Inclure `Dumpable` dans vos Value Objects, DTO ou Builders permet à vos utilisateurs d'inspecter l'état sans outil supplémentaire.

<Steps>
  <Step title="Ajouter à 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="Vérifier au milieu d'un Fluent Builder">
    ```php theme={null}
    $payload = (new PackageRequestBuilder)
        ->forUser($userId)
        ->withLocale('fr')
        ->dump('before send')
        ->toArray();
    ```
  </Step>
</Steps>

## Passer des arguments supplémentaires

Comme `Dumpable` appelle en interne `dump($this, ...$args)` / `dd($this, ...$args)`, vous pouvez afficher des informations de contexte en même temps.

```php theme={null}
$user->dump('Point de debug A');
// $this et 'Point de debug A' sont affichés ensemble
```

Utile lorsque vous utilisez `dump()` à plusieurs endroits. Vous identifiez immédiatement d'où provient chaque sortie.

## Traits associés

<Columns cols={3}>
  <Card title="Helper tap() / Tappable" icon="hand-point-up" href="/fr/advanced/tap">
    Découvrez le pattern qui insère un effet de bord tout en retournant la valeur.
  </Card>

  <Card title="Trait Conditionable" icon="git-branch" href="/fr/advanced/conditionable">
    Apprenez à concevoir des chaînes conditionnelles.
  </Card>

  <Card title="Trait Macroable" icon="puzzle-piece" href="/fr/advanced/macroable">
    Étendez des classes existantes avec vos propres méthodes.
  </Card>
</Columns>


## Related topics

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