Débogage d'une variable avec une trace de la pile d'appels concise avec le VarDumper Symfony

Publié le 28/04/2023 • Actualisé le 28/04/2023


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment déboguer avec le VarDumper Symfony une variable ainsi qu'une trace concise de la pile d'appels. La fonction debug_print_backtrace() affiche la pile d'appels directement, sans la retourner. Pour avoir le même résultat, mais correctement formaté, on peut utiliser cette astuce simple pour capturer la sortie grâce à une exception et sa fonction getTraceAsString(). Le débogueur de variables Symfony transforme correctement les retours à la ligne pour que chaque ligne soit affichée séparément. Idée originale par mon cher collègue twitter.com/meyer_baptiste ©.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use Symfony\Component\HttpFoundation\Request;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet253Trait
{
    public function snippet253(Request $request): void
    {
        // I deactivate the debug in prod

        //        dump(
        //            $request->attributes->all(),
        //            (new \Exception())->getTraceAsString()
        //        );

        $debug = <<<'NOWDOC'
Snippet253Trait.php on line 17:
array:9 [▼
  "_route" => "snippet_run"
  "_controller" => "App\Controller\SnippetController::run"
  "_locale" => "en"
  "slug" => "debugging-a-variable-with-a-concise-back-trace-with-the-symfony-vardumper"
  "_route_params" => array:2 [▼
    "_locale" => "en"
    "slug" => "debugging-a-variable-with-a-concise-back-trace-with-the-symfony-vardumper"
  ]
]

Snippet253Trait.php on line 17:
"""
#0 /strangebuzz.com/src/Controller/SnippetController.php(238): App\Controller\SnippetController->snippet253(Object(Symfony\Component\HttpFoundation\Request), Object(App\Repository\ArticleRepository)) ◀
#1 /strangebuzz.com/vendor/symfony/http-kernel/HttpKernel.php(163): App\Controller\SnippetController->run(Object(Symfony\Component\HttpFoundation\Request), 'snippet_run', 'debugging-a-var...', 'en', Object(App\Log\SlackLogger), Object(App\Utility\SpamChecker)) ◀
#2 /strangebuzz.com/vendor/symfony/http-kernel/HttpKernel.php(74): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) ◀
#3 /strangebuzz.com/vendor/symfony/http-kernel/Kernel.php(184): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) ◀
#4 /strangebuzz.com/public/index.php(42): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))
NOWDOC;

        echo $debug;

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire

  Travaillez avec moi !