[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
|
||||
if (null === $container->getParameter('twig.exception_listener.controller') && $container->hasDefinition('exception_listener')) {
|
||||
$container->removeDefinition('twig.exception_listener');
|
||||
} else {
|
||||
$container->removeDefinition('exception_listener');
|
||||
|
||||
if ($container->hasParameter('templating.engines')) {
|
||||
$engines = $container->getParameter('templating.engines');
|
||||
if (!\in_array('twig', $engines, true)) {
|
||||
$container->removeDefinition('twig.exception_listener');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ($container->hasParameter('templating.engines')) {
|
||||
$engines = $container->getParameter('templating.engines');
|
||||
if (\in_array('twig', $engines, true)) {
|
||||
$container->removeDefinition('exception_listener');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$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