Forcer la sortie des fonctions de debug Symfony pour le terminal

Publié le 13/12/2022 • Mis à jour le 13/12/2022


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 forcer la sortie des fonctions de debug Symfony pour le terminal. Quand on utilise les fonctions dd() and dump(), la sortie est automatiquement adaptée au contexte de l'appel. Si vous utilisez le terminal (les commandes, par exemple), la sortie sera du texte brut avec de belles couleurs ANSI. Si vous êtes dans un contexte d'une page web, vous aurez du HTML pour afficher le debug. Parfois, nous devons forcer le type de la sortie, et le contexte doit être corrigé. Par exemple, quand on fait des appels CURL dans le terminal. La SAPI PHP, dans ce cas, n'est pas CLI, et l'on a une sortie HTML qui est illisible. C'est là que le snippet est utile, appelez VarDumperHelper::forceCli() avant vos appels dd() et dump() et vous êtes bons.
PS : Une autre option est de fixer la variable d'environnement VAR_DUMPER_FORMAT=cli, mais ça n'a pas l'air de marcher sur ce projet, j'ai juste une page blanche. Je dois investiguer ce problème.


<?php

declare(strict_types=1);

namespace App\Helper;

use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\VarDumper;

/**
 * Force the CLI output for the dd() and dump() functions. Useful when doing CURL
 * calls in the terminal and wanting to debug.
 */
final class VarDumperHelper
{
    /**
     * @noinspection DisallowWritingIntoStaticPropertiesInspection
     */
    public static function forceCli(): void
    {
        CliDumper::$defaultOutput = 'php://output';
        VarDumper::setHandler(function ($var) {
            $cloner = new VarCloner();
            $dumper = new CliDumper();
            $dumper->dump($cloner->cloneVar($var));
        });
    }
}

 Plus sur Stackoverflow   Lire la doc  Snippet aléatoire