From 680fe7acb2f40d40d62a558917e894365696acf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Macias?= Date: Wed, 26 Nov 2014 15:11:30 +0100 Subject: [PATCH] [RFC] [DebugBundle] [HttpKernel] Avoid using container as dependency for DumpListener --- .../DebugBundle/Resources/config/services.xml | 4 +- .../HttpKernel/EventListener/DumpListener.php | 28 +++++------ .../Tests/EventListener/DumpListenerTest.php | 46 ++++++------------- 3 files changed, 28 insertions(+), 50 deletions(-) diff --git a/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml b/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml index 14da81c3dd..798e8b78ec 100644 --- a/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml +++ b/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml @@ -18,8 +18,8 @@ - - data_collector.dump + + diff --git a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php index 46833959b2..c7f2daf218 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php @@ -11,9 +11,10 @@ namespace Symfony\Component\HttpKernel\EventListener; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\VarDumper\Cloner\ClonerInterface; +use Symfony\Component\VarDumper\Dumper\DataDumperInterface; use Symfony\Component\VarDumper\VarDumper; /** @@ -27,30 +28,23 @@ class DumpListener implements EventSubscriberInterface private $dumper; /** - * @param ContainerInterface $container Service container, for lazy loading. - * @param string $dumper var_dumper dumper service to use. + * @param ClonerInterface $cloner Cloner service. + * @param DataDumperInterface $dumper Dumper service. */ - public function __construct(ContainerInterface $container, $dumper) + public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper) { - $this->container = $container; + $this->cloner = $cloner; $this->dumper = $dumper; } public function configure() { - if ($this->container) { - $container = $this->container; - $dumper = $this->dumper; - $this->container = null; + $cloner = $this->cloner; + $dumper = $this->dumper; - VarDumper::setHandler(function ($var) use ($container, $dumper) { - $dumper = $container->get($dumper); - $cloner = $container->get('var_dumper.cloner'); - $handler = function ($var) use ($dumper, $cloner) {$dumper->dump($cloner->cloneVar($var));}; - VarDumper::setHandler($handler); - $handler($var); - }); - } + VarDumper::setHandler(function ($var) use ($cloner, $dumper) { + $dumper->dump($cloner->cloneVar($var)); + }); } public static function getSubscribedEvents() diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php index c665df563d..a9b715bacc 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php @@ -11,10 +11,11 @@ namespace Symfony\Component\HttpKernel\Tests\EventListener; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\HttpKernel\EventListener\DumpListener; use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\VarDumper\Cloner\ClonerInterface; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\DataDumperInterface; use Symfony\Component\VarDumper\VarDumper; /** @@ -34,34 +35,23 @@ class DumpListenerTest extends \PHPUnit_Framework_TestCase public function testConfigure() { - $prevDumper = $this->getDumpHandler(); + $prevDumper = VarDumper::setHandler('var_dump'); + VarDumper::setHandler($prevDumper); - $container = new ContainerBuilder(); - $container->setDefinition('var_dumper.cloner', new Definition('Symfony\Component\HttpKernel\Tests\EventListener\MockCloner')); - $container->setDefinition('mock_dumper', new Definition('Symfony\Component\HttpKernel\Tests\EventListener\MockDumper')); + $cloner = new MockCloner(); + $dumper = new MockDumper(); ob_start(); $exception = null; - $listener = new DumpListener($container, 'mock_dumper'); + $listener = new DumpListener($cloner, $dumper); try { $listener->configure(); - $lazyDumper = $this->getDumpHandler(); VarDumper::dump('foo'); - - $loadedDumper = $this->getDumpHandler(); VarDumper::dump('bar'); $this->assertSame('+foo-+bar-', ob_get_clean()); - - $listenerReflector = new \ReflectionClass($listener); - $lazyReflector = new \ReflectionFunction($lazyDumper); - $loadedReflector = new \ReflectionFunction($loadedDumper); - - $this->assertSame($listenerReflector->getFilename(), $lazyReflector->getFilename()); - $this->assertSame($listenerReflector->getFilename(), $loadedReflector->getFilename()); - $this->assertGreaterThan($lazyReflector->getStartLine(), $loadedReflector->getStartLine()); } catch (\Exception $exception) { } @@ -71,28 +61,22 @@ class DumpListenerTest extends \PHPUnit_Framework_TestCase throw $exception; } } - - private function getDumpHandler() - { - $prevDumper = VarDumper::setHandler('var_dump'); - VarDumper::setHandler($prevDumper ); - - return $prevDumper; - } } -class MockCloner +class MockCloner implements ClonerInterface { public function cloneVar($var) { - return $var.'-'; + return new Data(array($var.'-')); } } -class MockDumper +class MockDumper implements DataDumperInterface { - public function dump($var) + public function dump(Data $data) { - echo '+'.$var; + $rawData = $data->getRawData(); + + echo '+'.$rawData[0]; } }