Skip to content

Commit

Permalink
[RFC] [DebugBundle] [HttpKernel] Avoid using container as dependency …
Browse files Browse the repository at this point in the history
…for DumpListener
  • Loading branch information
jeromemacias authored and nicolas-grekas committed Nov 27, 2014
1 parent 6a59db5 commit 680fe7a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 51 deletions.
4 changes: 2 additions & 2 deletions src/Symfony/Bundle/DebugBundle/Resources/config/services.xml
Expand Up @@ -18,8 +18,8 @@

<service id="debug.dump_listener" class="Symfony\Component\HttpKernel\EventListener\DumpListener">
<tag name="kernel.event_subscriber" />
<argument type="service" id="service_container" />
<argument>data_collector.dump</argument>
<argument type="service" id="var_dumper.cloner" />
<argument type="service" id="data_collector.dump" />
</service>

<service id="var_dumper.cloner" class="Symfony\Component\VarDumper\Cloner\VarCloner" />
Expand Down
30 changes: 12 additions & 18 deletions src/Symfony/Component/HttpKernel/EventListener/DumpListener.php
Expand Up @@ -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;

/**
Expand All @@ -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;

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);
});
}
$cloner = $this->cloner;
$dumper = $this->dumper;

VarDumper::setHandler(function ($var) use ($cloner, $dumper) {
$dumper->dump($cloner->cloneVar($var));
});
}

public static function getSubscribedEvents()
Expand Down
Expand Up @@ -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;

/**
Expand All @@ -34,34 +35,23 @@ public function testSubscribedEvents()

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) {
}

Expand All @@ -71,28 +61,22 @@ public function testConfigure()
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];
}
}

0 comments on commit 680fe7a

Please sign in to comment.