Skip to content

Commit e2f7187

Browse files
committed
feature #10702 [HttpKernel][FrameworkBundle] SSI support (KingCrunch)
This PR was merged into the 2.6-dev branch. Discussion ---------- [HttpKernel][FrameworkBundle] SSI support | Q | A | ------------- | --- | Bug fix? | No | New feature? | Yes | BC breaks? | No | Deprecations? | No | Tests pass? | Yes | Fixed tickets | #9419 (, #10684) | License | MIT It does not support comments, or alternative URIs, or "continue" in case of errors. Maybe I can workaround that, but I've decided to left it out for this PR. Especially as far as I can see a "alternative URIs"-hack would _always_ lead to two requests, even if it's not needed. Commits ------- 06cea08 SSI support
2 parents 6bbd5aa + cd75a49 commit e2f7187

File tree

6 files changed

+77
-2
lines changed

6 files changed

+77
-2
lines changed

DependencyInjection/Configuration.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public function getConfigTreeBuilder()
8181
$this->addCsrfSection($rootNode);
8282
$this->addFormSection($rootNode);
8383
$this->addEsiSection($rootNode);
84+
$this->addSsiSection($rootNode);
8485
$this->addFragmentsSection($rootNode);
8586
$this->addProfilerSection($rootNode);
8687
$this->addRouterSection($rootNode);
@@ -148,6 +149,17 @@ private function addEsiSection(ArrayNodeDefinition $rootNode)
148149
;
149150
}
150151

152+
private function addSsiSection(ArrayNodeDefinition $rootNode)
153+
{
154+
$rootNode
155+
->children()
156+
->arrayNode('ssi')
157+
->info('ssi configuration')
158+
->canBeEnabled()
159+
->end()
160+
->end();
161+
}
162+
151163
private function addFragmentsSection(ArrayNodeDefinition $rootNode)
152164
{
153165
$rootNode

DependencyInjection/FrameworkExtension.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public function load(array $configs, ContainerBuilder $container)
122122

123123
$this->registerValidationConfiguration($config['validation'], $container, $loader);
124124
$this->registerEsiConfiguration($config['esi'], $container, $loader);
125+
$this->registerSsiConfiguration($config['ssi'], $container, $loader);
125126
$this->registerFragmentsConfiguration($config['fragments'], $container, $loader);
126127
$this->registerProfilerConfiguration($config['profiler'], $container, $loader);
127128
$this->registerTranslatorConfiguration($config['translator'], $container);
@@ -208,6 +209,22 @@ private function registerEsiConfiguration(array $config, ContainerBuilder $conta
208209
$loader->load('esi.xml');
209210
}
210211

212+
/**
213+
* Loads the SSI configuration.
214+
*
215+
* @param array $config An SSI configuration array
216+
* @param ContainerBuilder $container A ContainerBuilder instance
217+
* @param XmlFileLoader $loader An XmlFileLoader instance
218+
*/
219+
private function registerSsiConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
220+
{
221+
if (!$this->isConfigEnabled($container, $config)) {
222+
return;
223+
}
224+
225+
$loader->load('ssi.xml');
226+
}
227+
211228
/**
212229
* Loads the fragments configuration.
213230
*

HttpCache/HttpCache.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function __construct(HttpKernelInterface $kernel, $cacheDir = null)
3939
$this->kernel = $kernel;
4040
$this->cacheDir = $cacheDir;
4141

42-
parent::__construct($kernel, $this->createStore(), $this->createEsi(), array_merge(array('debug' => $kernel->isDebug()), $this->getOptions()));
42+
parent::__construct($kernel, $this->createStore(), $this->createSurrogate(), array_merge(array('debug' => $kernel->isDebug()), $this->getOptions()));
4343
}
4444

4545
/**
@@ -55,7 +55,7 @@ protected function forward(Request $request, $raw = false, Response $entry = nul
5555
{
5656
$this->getKernel()->boot();
5757
$this->getKernel()->getContainer()->set('cache', $this);
58-
$this->getKernel()->getContainer()->set('esi', $this->getEsi());
58+
$this->getKernel()->getContainer()->set($this->getSurrogate()->getName(), $this->getSurrogate());
5959

6060
return parent::forward($request, $raw, $entry);
6161
}
@@ -70,6 +70,18 @@ protected function getOptions()
7070
return array();
7171
}
7272

73+
protected function createSurrogate()
74+
{
75+
return $this->createEsi();
76+
}
77+
78+
/**
79+
* Creates new ESI instance
80+
*
81+
* @return Esi
82+
*
83+
* @deprecated Deprecated since version 2.6, to be removed in 3.0. Use createSurrogate() instead
84+
*/
7385
protected function createEsi()
7486
{
7587
return new Esi();

Resources/config/fragment_renderer.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<parameter key="fragment.renderer.hinclude.class">Symfony\Bundle\FrameworkBundle\Fragment\ContainerAwareHIncludeFragmentRenderer</parameter>
1111
<parameter key="fragment.renderer.hinclude.global_template"></parameter>
1212
<parameter key="fragment.renderer.esi.class">Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer</parameter>
13+
<parameter key="fragment.renderer.ssi.class">Symfony\Component\HttpKernel\Fragment\SsiFragmentRenderer</parameter>
1314
<parameter key="fragment.path">/_fragment</parameter>
1415
</parameters>
1516

@@ -41,5 +42,17 @@
4142
<argument type="service" id="fragment.renderer.inline" />
4243
<call method="setFragmentPath"><argument>%fragment.path%</argument></call>
4344
</service>
45+
46+
<service id="fragment.renderer.ssi" class="%fragment.renderer.ssi.class%">
47+
<tag name="kernel.fragment_renderer" />
48+
<argument type="service" id="ssi" on-invalid="null" />
49+
<argument type="service" id="fragment.renderer.inline" />
50+
<call method="setFragmentPath">
51+
<argument>%fragment.path%</argument>
52+
</call>
53+
<call method="setUriSigner">
54+
<argument type="service" id="uri_signer" />
55+
</call>
56+
</service>
4457
</services>
4558
</container>

Resources/config/ssi.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<parameters>
8+
<parameter key="ssi.class">Symfony\Component\HttpKernel\HttpCache\Ssi</parameter>
9+
<parameter key="ssi_listener.class">Symfony\Component\HttpKernel\EventListener\SurrogateListener</parameter>
10+
</parameters>
11+
12+
<services>
13+
<service id="ssi" class="%ssi.class%" />
14+
15+
<service id="ssi_listener" class="%ssi_listener.class%">
16+
<tag name="kernel.event_subscriber" />
17+
<argument type="service" id="ssi" on-invalid="ignore" />
18+
</service>
19+
</services>
20+
</container>

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ protected static function getBundleDefaultConfig()
105105
'field_name' => '_token',
106106
),
107107
'esi' => array('enabled' => false),
108+
'ssi' => array('enabled' => false),
108109
'fragments' => array(
109110
'enabled' => false,
110111
'path' => '/_fragment',

0 commit comments

Comments
 (0)