Umožnit uložit klikací dump do souboru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- filsedla
- Člen | 101
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?