feature #23272 [FrameworkBundle] disable unusable fragment renderers (xabbuh)

This PR was merged into the 3.4 branch.

Discussion
----------

[FrameworkBundle] disable unusable fragment renderers

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #21733
| License       | MIT
| Doc PR        |

Commits
-------

2b3d7f021d disable unusable fragment renderers
This commit is contained in:
Fabien Potencier 2017-07-03 09:16:04 +03:00
commit 98be08bb6c
12 changed files with 107 additions and 4 deletions

View File

@ -392,6 +392,8 @@ class FrameworkExtension extends Extension
private function registerEsiConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
{
if (!$this->isConfigEnabled($container, $config)) {
$container->removeDefinition('fragment.renderer.esi');
return;
}
@ -408,6 +410,8 @@ class FrameworkExtension extends Extension
private function registerSsiConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
{
if (!$this->isConfigEnabled($container, $config)) {
$container->removeDefinition('fragment.renderer.ssi');
return;
}
@ -424,6 +428,8 @@ class FrameworkExtension extends Extension
private function registerFragmentsConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
{
if (!$this->isConfigEnabled($container, $config)) {
$container->removeDefinition('fragment.renderer.hinclude');
return;
}

View File

@ -0,0 +1,13 @@
<?php
$container->loadFromExtension('framework', array(
'fragments' => array(
'enabled' => false,
),
'esi' => array(
'enabled' => true,
),
'ssi' => array(
'enabled' => true,
),
));

View File

@ -0,0 +1,7 @@
<?php
$container->loadFromExtension('framework', array(
'esi' => array(
'enabled' => false,
),
));

View File

@ -0,0 +1,7 @@
<?php
$container->loadFromExtension('framework', array(
'ssi' => array(
'enabled' => false,
),
));

View File

@ -0,0 +1,13 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:fragments enabled="false" />
<framework:esi enabled="true" />
<framework:ssi enabled="true" />
</framework:config>
</container>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:esi enabled="false" />
</framework:config>
</container>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:ssi enabled="false" />
</framework:config>
</container>

View File

@ -0,0 +1,7 @@
framework:
fragments:
enabled: false
esi:
enabled: true
ssi:
enabled: true

View File

@ -0,0 +1,3 @@
framework:
esi:
enabled: false

View File

@ -0,0 +1,3 @@
framework:
ssi:
enabled: false

View File

@ -132,6 +132,14 @@ abstract class FrameworkExtensionTest extends TestCase
$container = $this->createContainerFromFile('full');
$this->assertTrue($container->hasDefinition('esi'), '->registerEsiConfiguration() loads esi.xml');
$this->assertTrue($container->hasDefinition('fragment.renderer.esi'), 'The ESI fragment renderer is registered');
}
public function testEsiDisabled()
{
$container = $this->createContainerFromFile('esi_disabled');
$this->assertFalse($container->hasDefinition('fragment.renderer.esi'), 'The ESI fragment renderer is not registered');
}
public function testSsi()
@ -139,6 +147,23 @@ abstract class FrameworkExtensionTest extends TestCase
$container = $this->createContainerFromFile('full');
$this->assertTrue($container->hasDefinition('ssi'), '->registerSsiConfiguration() loads ssi.xml');
$this->assertTrue($container->hasDefinition('fragment.renderer.ssi'), 'The SSI fragment renderer is registered');
}
public function testSsiDisabled()
{
$container = $this->createContainerFromFile('ssi_disabled');
$this->assertFalse($container->hasDefinition('fragment.renderer.ssi'), 'The SSI fragment renderer is not registered');
}
public function testEsiAndSsiWithoutFragments()
{
$container = $this->createContainerFromFile('esi_and_ssi_without_fragments');
$this->assertFalse($container->hasDefinition('fragment.renderer.hinclude'), 'The HInclude fragment renderer is not registered');
$this->assertTrue($container->hasDefinition('fragment.renderer.esi'), 'The ESI fragment renderer is registered');
$this->assertTrue($container->hasDefinition('fragment.renderer.ssi'), 'The SSI fragment renderer is registered');
}
public function testEnabledProfiler()

View File

@ -61,10 +61,7 @@ class ExtensionPass implements CompilerPassInterface
$container->getDefinition('twig.extension.httpkernel')->addTag('twig.extension');
// inject Twig in the hinclude service if Twig is the only registered templating engine
if (
!$container->hasParameter('templating.engines')
|| array('twig') == $container->getParameter('templating.engines')
) {
if ((!$container->hasParameter('templating.engines') || array('twig') == $container->getParameter('templating.engines')) && $container->hasDefinition('fragment.renderer.hinclude')) {
$container->getDefinition('fragment.renderer.hinclude')
->addTag('kernel.fragment_renderer', array('alias' => 'hinclude'))
->replaceArgument(0, new Reference('twig'))