[TwigBundle] Only remove kernel exception listener if twig is used
This commit is contained in:
parent
72ff4012a5
commit
7c34f6e866
@ -33,15 +33,19 @@ class ExceptionListenerPass implements CompilerPassInterface
|
|||||||
// register the exception listener only if it's currently used, else use the provided by FrameworkBundle
|
// register the exception listener only if it's currently used, else use the provided by FrameworkBundle
|
||||||
if (null === $container->getParameter('twig.exception_listener.controller') && $container->hasDefinition('exception_listener')) {
|
if (null === $container->getParameter('twig.exception_listener.controller') && $container->hasDefinition('exception_listener')) {
|
||||||
$container->removeDefinition('twig.exception_listener');
|
$container->removeDefinition('twig.exception_listener');
|
||||||
} else {
|
|
||||||
$container->removeDefinition('exception_listener');
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($container->hasParameter('templating.engines')) {
|
if ($container->hasParameter('templating.engines')) {
|
||||||
$engines = $container->getParameter('templating.engines');
|
$engines = $container->getParameter('templating.engines');
|
||||||
if (!\in_array('twig', $engines, true)) {
|
if (\in_array('twig', $engines, true)) {
|
||||||
|
$container->removeDefinition('exception_listener');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$container->removeDefinition('twig.exception_listener');
|
$container->removeDefinition('twig.exception_listener');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\TwigBundle\Tests\DependencyInjection\Compiler;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bundle\TwigBundle\DependencyInjection\Compiler\ExceptionListenerPass;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\Security\Http\Firewall\ExceptionListener;
|
||||||
|
use Twig\Environment;
|
||||||
|
|
||||||
|
class ExceptionListenerPassTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testExitsWhenTwigIsNotAvailable(): void
|
||||||
|
{
|
||||||
|
$builder = new ContainerBuilder();
|
||||||
|
$builder->register('exception_listener', ExceptionListener::class);
|
||||||
|
$builder->register('twig.exception_listener', ExceptionListener::class);
|
||||||
|
|
||||||
|
($pass = new ExceptionListenerPass())->process($builder);
|
||||||
|
|
||||||
|
$this->assertTrue($builder->hasDefinition('exception_listener'));
|
||||||
|
$this->assertTrue($builder->hasDefinition('twig.exception_listener'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRemovesTwigExceptionListenerWhenNoExceptionListenerControllerExists(): void
|
||||||
|
{
|
||||||
|
$builder = new ContainerBuilder();
|
||||||
|
$builder->register('twig', Environment::class);
|
||||||
|
$builder->register('exception_listener', ExceptionListener::class);
|
||||||
|
$builder->register('twig.exception_listener', ExceptionListener::class);
|
||||||
|
$builder->setParameter('twig.exception_listener.controller', null);
|
||||||
|
|
||||||
|
($pass = new ExceptionListenerPass())->process($builder);
|
||||||
|
|
||||||
|
$this->assertTrue($builder->hasDefinition('exception_listener'));
|
||||||
|
$this->assertFalse($builder->hasDefinition('twig.exception_listener'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRemovesTwigExceptionListenerIfTwigIsNotUsedAsTemplateEngine(): void
|
||||||
|
{
|
||||||
|
$builder = new ContainerBuilder();
|
||||||
|
$builder->register('twig', Environment::class);
|
||||||
|
$builder->register('exception_listener', ExceptionListener::class);
|
||||||
|
$builder->register('twig.exception_listener', ExceptionListener::class);
|
||||||
|
$builder->setParameter('twig.exception_listener.controller', 'exception_controller::showAction');
|
||||||
|
$builder->setParameter('templating.engines', ['php']);
|
||||||
|
|
||||||
|
($pass = new ExceptionListenerPass())->process($builder);
|
||||||
|
|
||||||
|
$this->assertTrue($builder->hasDefinition('exception_listener'));
|
||||||
|
$this->assertFalse($builder->hasDefinition('twig.exception_listener'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRemovesKernelExceptionListenerIfTwigIsUsedAsTemplateEngine(): void
|
||||||
|
{
|
||||||
|
$builder = new ContainerBuilder();
|
||||||
|
$builder->register('twig', Environment::class);
|
||||||
|
$builder->register('exception_listener', ExceptionListener::class);
|
||||||
|
$builder->register('twig.exception_listener', ExceptionListener::class);
|
||||||
|
$builder->setParameter('twig.exception_listener.controller', 'exception_controller::showAction');
|
||||||
|
$builder->setParameter('templating.engines', ['twig']);
|
||||||
|
|
||||||
|
($pass = new ExceptionListenerPass())->process($builder);
|
||||||
|
|
||||||
|
$this->assertFalse($builder->hasDefinition('exception_listener'));
|
||||||
|
$this->assertTrue($builder->hasDefinition('twig.exception_listener'));
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user