diff --git a/src/DumpServerServiceProvider.php b/src/DumpServerServiceProvider.php index ae9b667..b08948f 100644 --- a/src/DumpServerServiceProvider.php +++ b/src/DumpServerServiceProvider.php @@ -2,11 +2,13 @@ namespace BeyondCode\DumpServer; +use BeyondCode\DumpServer\FallbackDumper; +use Illuminate\Foundation\Console\CliDumper as LaravelCliDumper; use Illuminate\Support\ServiceProvider; -use Symfony\Component\VarDumper\VarDumper; +use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; use Symfony\Component\VarDumper\Server\Connection; use Symfony\Component\VarDumper\Server\DumpServer; -use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; +use Symfony\Component\VarDumper\VarDumper; class DumpServerServiceProvider extends ServiceProvider { @@ -44,13 +46,20 @@ public function register() $this->app->when(DumpServer::class)->needs('$host')->give($host); + $this->app->when(FallbackDumper::class)->needs('$basePath')->give(fn () => $this->app->basePath()); + $this->app->when(FallbackDumper::class)->needs('$compiledViewPath')->give(fn () => $this->app['config']->get('view.compiled')); + $connection = new Connection($host, [ 'request' => new RequestContextProvider($this->app['request']), 'source' => new SourceContextProvider('utf-8', base_path()), ]); - VarDumper::setHandler(function ($var) use ($connection) { - $this->app->makeWith(Dumper::class, ['connection' => $connection])->dump($var); + $fallbackDumper = class_exists(LaravelCliDumper::class) + ? $this->app->make(FallbackDumper::class) + : null; + + VarDumper::setHandler(function ($var) use ($connection, $fallbackDumper) { + $this->app->makeWith(Dumper::class, ['connection' => $connection, 'fallbackDumper' => $fallbackDumper])->dump($var); }); } } diff --git a/src/Dumper.php b/src/Dumper.php index 4e6ab7b..1bbef06 100755 --- a/src/Dumper.php +++ b/src/Dumper.php @@ -2,6 +2,7 @@ namespace BeyondCode\DumpServer; +use BeyondCode\DumpServer\FallbackDumper; use Symfony\Component\VarDumper\Cloner\VarCloner; use Symfony\Component\VarDumper\Dumper\CliDumper; use Symfony\Component\VarDumper\Dumper\HtmlDumper; @@ -16,15 +17,24 @@ class Dumper */ private $connection; + /** + * The fallback dumper to use if there is no active connection. + * + * @var \BeyondCode\DumpServer\FallbackDumper|null + */ + private $fallbackDumper; + /** * Dumper constructor. * * @param \Symfony\Component\VarDumper\Server\Connection|null $connection + * @param \BeyondCode\DumpServer\FallbackDumper|null $fallbackDumper * @return void */ - public function __construct(Connection $connection = null) + public function __construct(Connection $connection = null, FallbackDumper $fallbackDumper = null) { $this->connection = $connection; + $this->fallbackDumper = $fallbackDumper; } /** @@ -39,7 +49,8 @@ public function dump($value) $data = $this->createVarCloner()->cloneVar($value); if ($this->connection === null || $this->connection->write($data) === false) { - $dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper; + $dumper = $this->fallbackDumper ?? (in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper); + $dumper->dump($data); } } else { diff --git a/src/FallbackDumper.php b/src/FallbackDumper.php new file mode 100644 index 0000000..2910a25 --- /dev/null +++ b/src/FallbackDumper.php @@ -0,0 +1,64 @@ +basePath = $basePath; + $this->compiledViewPath = $compiledViewPath; + } + + /** + * Dump a value with elegance. + * + * @param Data $data + * @return void + */ + public function dump(Data $data) + { + if (class_exists(LaravelCliDumper::class)) { + // Laravel 9+ + $dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) + ? new LaravelCliDumper(new ConsoleOutput, $this->basePath, $this->compiledViewPath) + : new LaravelHtmlDumper($this->basePath, $this->compiledViewPath); + + $dumper->dumpWithSource($data); + } else { + $dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) + ? new SymfonyCliDumper + : new SymfonyHtmlDumper; + + $dumper->dump($data); + } + } +}