Umožnit uložit klikací dump do souboru

před 3 lety

filsedla
Člen | 82
+
0
-

V poslední době jsem potřeboval zjišťovat informace o objektech buď v produkčním prostředí nebo v konzoli, kde nelze nebo není pohodlné použít standardní dump(). Napsal jsem si tohle:

final class ObjectDumper extends Object
{
    /** @var string */
    public static $dumpDir;

    /**
     * @param mixed $var
     * @param string|null $title
     * @return void
     */
    public static function dump($var, $title = NULL)
    {
        $dump = "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>" . $title . "</title>\n";
        $dump .= "<style>\n" . @file_get_contents(__DIR__ . '/../../../vendor/tracy/tracy/src/Tracy/assets/Dumper/dumper.css') . "\n</style>\n";
        $dump .= "<style>\n" . @file_get_contents(__DIR__ . '/../../../vendor/tracy/tracy/src/Tracy/assets/Toggle/toggle.css') . "\n</style>\n";
        $dump .= "<script>document.documentElement.className+=' tracy-js'</script>\n";
        $dump .= "</head>\n<body>\n";
        $dump .= Dumper::toHtml($var, [
                Dumper::DEPTH => 6,
                Dumper::TRUNCATE => 1000,
                Dumper::LOCATION => FALSE,
                Dumper::LIVE => FALSE,
                Dumper::COLLAPSE => 0,
                Dumper::COLLAPSE_COUNT => 1,
            ]) . "\n";
        $dump .= "<script>\n(function() {\n";
        $dump .= @file_get_contents(__DIR__ . '/../../../vendor/tracy/tracy/src/Tracy/assets/Toggle/toggle.js') . "\n";
        $dump .= @file_get_contents(__DIR__ . '/../../../vendor/tracy/tracy/src/Tracy/assets/Dumper/dumper.js') . "\n";
        $dump .= "})();\n</script>\n";
        $dump .= "<script>\nTracy && Tracy.Dumper.init(" . json_encode(Dumper::fetchLiveData()) . ");\n</script>\n";
        $dump .= "</body>\n</html>\n";

        if (!is_dir(self::$dumpDir)) {
            throw new InvalidStateException("Cannot dump to '" . self::$dumpDir . "'. \$dumpDir must be set to point to a directory.");
        };

        $filename = self::$dumpDir . '/' . @date('[Y-m-d H-i-s]') . ($title ? ('-' . $title) : '') . '.html';

        if (!@file_put_contents($filename, $dump)) { // @ is escalated to exception
            throw new \RuntimeException("Cannot dump to '$filename'.");
        }
    }
}

Je to pracovní verze. Jsou to v podstatě akorát zkopírované kousky kódu z Tracy, což není ideální.

@DavidGrudl Mohlo by se něco takového stát součástí Tracy?

před 3 lety

filsedla
Člen | 82
+
0
-