Formation PUB030 : Laravel, 2019 Déboguer une application Laravel

17.4 Dump and die : fonctions dd(), ddd() ou leur version améliorée ddsafe()


Laravel vous offre une petite fonction bien utile pour tester rapidement le contenu d'une variable : dd() (Dump and Die). Elle permet d'afficher du texte à l'écran et de terminer l'exécution du programme.

▼Publicité Le texte se poursuit plus bas

On obtiendra alors un écran blanc avec seulement les données que l'on a demandé d'afficher. Dans le cas où la variable est un objet, Laravel le convertira automatiquement au format JSON pour en faciliter la lecture.

Depuis Laravel 6, il existe également la fonction ddd() (Dump, Die, Debug) qui affiche plus de détails : la liste des fonctions appelées (stack trace), les informations sur la requête (request), etc.

Ceci est utile pendant la phase de développement. Mais imaginez ce scénario : vous avez placé un appel à dd() (ou à ddd()) à un endroit très précis, dans un if qui n'est exécuté que dans un contexte particulier. Par mégarde, vous avez oublié d'effacer un appel à dd(). Vous mettez votre site en ligne et Bang ! Le contexte précis où le dd() était placé survient. Vous vous exposez à de gros problèmes...

Pour éviter ce genre de situation, je vous propose d'écrire une petite fonction nommée ddsafe().

Placez cette fonction dans un fichier que vous nommerez debogage.php. Je vous suggère de placer vos fichiers de fonctions dans un dossier nommé fonctions sous le dossier app.

Fichier app\fonctions\debogage.php

/**

 * Fait un dump and die seulement si en mode débogage.

 * Source : christianelagace.com

 *

 * @param  mixed

 * @return void

 */

function ddsafe($donnees) : void

{

    if (Config::get('app.debug')) {

        dd($donnees);   // ou ddd($donnees)

    }

}

Pour utiliser cette fonction, vous devrez ajouter un include_once dans le contrôleur où vous en avez besoin ou encore charger automatiquement le bibliothèque de fonctions de débogage.

Contrôleur Laravel (PHP)

include_once(app_path() . '/fonctions/debogage.php');

...

public function ...

{

    ...

    ddsafe(Chalet::count());

}

L'information qui sera affiché par dd(), ddd() ou ddsafe() peut être de différent type, par exemple nombre, chaîne de caractères, tableau, objet.

Ex :

Contrôleur Laravel (PHP)

$chalet = Chalet::find(1);

ddsafe($chalet);

Dans cet exemple, on a affiché une instance d'un modèle, donc un objet. Ceci affichera à l'écran une série de propriétés, au format JSON.

Ex :

Résultat à l'écran

Chalet {#177 ▼

  #primaryKey: "id"

  #connection: null

  #table: null

  #keyType: "int"

  #perPage: 15

  +incrementing: true

  +timestamps: true

  #attributes: array:10 [▶]

  #original: array:10 [▶]

  #relations: []

  #hidden: []

  #visible: []

  #appends: []

  #fillable: []

  #guarded: array:1 [▶]

  #dates: []

  #dateFormat: null

  #casts: []

  #touches: []

  #observables: []

  #with: []

  +exists: true

  +wasRecentlyCreated: false

}

Un clic sur les flèches montrera les détails.

Il est également possible d'appuyer sur Ctrl+Clic sur la première flèche du haut pour ouvrir tous les détails d'un seul coup.

Ex :

Résultat à l'écran

Chalet {#177 ▼

  #primaryKey: "id"

  #connection: null

  #table: null

  #keyType: "int"

  #perPage: 15

  +incrementing: true

  +timestamps: true

  #attributes: array:10 [▼

    "id" => 1

    "description" => "La maison champêtre"

    "proprietaire_id" => 1

    "adresse1" => "18, chemin Beauchesne"

    "adresse2" => ""

    "ville_id" => 2

    "codepostal" => "A9A 9A9"

    "pretpourlocation" => 1

    "created_at" => null

    "updated_at" => null

  ]

  #original: array:10 [▼

    "id" => 1

    "description" => "La maison champêtre"

    "proprietaire_id" => 1

    "adresse1" => "18, chemin Beauchesne"

    "adresse2" => ""

    "ville_id" => 2

    "codepostal" => "A9A 9A9"

    "pretpourlocation" => 1

    "created_at" => null

    "updated_at" => null

  ]

  #relations: []

  #hidden: []

  #visible: []

  #appends: []

  #fillable: []

  #guarded: array:1 [▼

    0 => "*"

  ]

  #dates: []

  #dateFormat: null

  #casts: []

  #touches: []

  #observables: []

  #with: []

  +exists: true

  +wasRecentlyCreated: false

}

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 15 janvier 2020
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre