diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index 5762fb4c33..65fe44a9cd 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -205,6 +205,7 @@ class Configuration implements ConfigurationInterface
->children()
->scalarNode('assets_version')->defaultValue(null)->end()
->scalarNode('assets_version_format')->defaultValue('%%s?%%s')->end()
+ ->scalarNode('hinclude_default_template')->defaultNull()->end()
->arrayNode('form')
->addDefaultsIfNotSet()
->fixXmlConfig('resource')
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 2e80aea918..e6da985e3d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -332,6 +332,7 @@ class FrameworkExtension extends Extension
$container->setParameter('templating.helper.code.file_link_format', isset($links[$ide]) ? $links[$ide] : $ide);
$container->setParameter('templating.helper.form.resources', $config['form']['resources']);
+ $container->setParameter('templating.hinclude.default_template', $config['hinclude_default_template']);
if ($container->getParameter('kernel.debug')) {
$loader->load('templating_debug.xml');
diff --git a/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php b/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php
index 0ab5634e81..64dc8a8955 100644
--- a/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php
+++ b/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php
@@ -114,7 +114,7 @@ class HttpKernel extends BaseHttpKernel
$this->esiSupport = $this->container->has('esi') && $this->container->get('esi')->hasSurrogateEsiCapability($this->container->get('request'));
}
- if ($this->esiSupport && $options['standalone']) {
+ if ($this->esiSupport && (true === $options['standalone'] || 'esi' === $options['standalone'])) {
$uri = $this->generateInternalUri($controller, $options['attributes'], $options['query']);
$alt = '';
@@ -125,6 +125,17 @@ class HttpKernel extends BaseHttpKernel
return $this->container->get('esi')->renderIncludeTag($uri, $alt, $options['ignore_errors'], $options['comment']);
}
+ if ('js' === $options['standalone']) {
+ $uri = $this->generateInternalUri($controller, $options['attributes'], $options['query'], false);
+ $defaultContent = null;
+
+ if ($template = $this->container->getParameter('templating.hinclude.default_template')) {
+ $defaultContent = $this->container->get('templating')->render($template);
+ }
+
+ return $this->renderHIncludeTag($uri, $defaultContent);
+ }
+
$request = $this->container->get('request');
// controller or URI?
@@ -185,14 +196,14 @@ class HttpKernel extends BaseHttpKernel
*
* @return string An internal URI
*/
- public function generateInternalUri($controller, array $attributes = array(), array $query = array())
+ public function generateInternalUri($controller, array $attributes = array(), array $query = array(), $secure = true)
{
if (0 === strpos($controller, '/')) {
return $controller;
}
$path = http_build_query($attributes);
- $uri = $this->container->get('router')->generate('_internal', array(
+ $uri = $this->container->get('router')->generate($secure ? '_internal' : '_internal_unsecure', array(
'controller' => $controller,
'path' => $path ?: 'none',
'_format' => $this->container->get('request')->getRequestFormat(),
@@ -204,4 +215,16 @@ class HttpKernel extends BaseHttpKernel
return $uri;
}
+
+ /**
+ * Renders an HInclude tag.
+ *
+ * @param string $uri A URI
+ */
+ public function renderHIncludeTag($uri, $defaultContent = null)
+ {
+ $html = sprintf('%s', $uri, $defaultContent);
+
+ return $html;
+ }
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/internal.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/internal.xml
index 60c7c1c995..2d91092a3e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/internal.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing/internal.xml
@@ -4,7 +4,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
-
+
+ FrameworkBundle:Internal:index
+ .+
+ [^.]+
+
+
+
FrameworkBundle:Internal:index
.+
[^.]+