diff --git a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php index 3acbe7d46c86..1b5e8084fdc3 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php @@ -14,6 +14,8 @@ use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\VarDumper\Cloner\ClonerInterface; +use Symfony\Component\VarDumper\Dumper\CliDumper; +use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; use Symfony\Component\VarDumper\Dumper\DataDumperInterface; use Symfony\Component\VarDumper\Server\Connection; use Symfony\Component\VarDumper\VarDumper; @@ -46,6 +48,20 @@ public function configure() $data = $cloner->cloneVar($var); if (!$connection || !$connection->write($data)) { + list('name' => $name, 'file' => $file, 'line' => $line) = (new SourceContextProvider())->getContext(); + if (\is_string($file)) { + $name = $file; + } + + if ($dumper instanceof CliDumper) { + (function (string $name, int $line) { + $this->line = $this->style('meta', $name).' on line '.$this->style('meta', $line).':'; + $this->dumpLine(0); + })->bindTo($dumper, $dumper)($name, $line); + } else { + $dumper->dump($cloner->cloneVar($name.' on line '.$line.':')); + } + $dumper->dump($data); } }); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php index 509f443087eb..d384c50bd036 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php @@ -51,8 +51,7 @@ public function testConfigure() VarDumper::dump('foo'); VarDumper::dump('bar'); - - $this->assertSame('+foo-+bar-', ob_get_clean()); + $this->assertSame('+'.__FILE__.' on line '.(__LINE__ - 2).':-+foo-+'.__FILE__.' on line '.(__LINE__ - 1).':-+bar-', ob_get_clean()); } catch (\Exception $exception) { } diff --git a/src/Symfony/Component/VarDumper/VarDumper.php b/src/Symfony/Component/VarDumper/VarDumper.php index ff0cc948e22f..c0fbac98facc 100644 --- a/src/Symfony/Component/VarDumper/VarDumper.php +++ b/src/Symfony/Component/VarDumper/VarDumper.php @@ -13,6 +13,7 @@ use Symfony\Component\VarDumper\Cloner\VarCloner; use Symfony\Component\VarDumper\Dumper\CliDumper; +use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; use Symfony\Component\VarDumper\Dumper\HtmlDumper; // Load the global dump() function @@ -37,6 +38,26 @@ public static function dump($var) } self::$handler = function ($var) use ($cloner, $dumper) { + (function () { + list('name' => $name, 'file' => $file, 'line' => $line) = (new SourceContextProvider())->getContext(); + + $attr = array(); + if ($this instanceof HtmlDumper) { + if (\is_string($file)) { + $attr = array( + 'file' => $file, + 'line' => $line, + 'title' => $file, + ); + } + } else { + $name = $file; + } + + $this->line = $this->style('meta', $name, $attr).' on line '.$this->style('meta', $line).':'; + $this->dumpLine(0); + })->bindTo($dumper, $dumper)(); + $dumper->dump($cloner->cloneVar($var)); }; }