From 878e86db8a6d52de988ae00a616e1f7fd3a0b00a Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 10 Jul 2012 11:41:19 +0200 Subject: [PATCH] added global variables access in a form theme (closes #3058) --- src/Symfony/Bridge/Twig/CHANGELOG.md | 1 + src/Symfony/Bridge/Twig/Extension/FormExtension.php | 4 +++- .../Twig/Tests/Extension/FormExtensionDivLayoutTest.php | 3 ++- .../Twig/Tests/Extension/FormExtensionTableLayoutTest.php | 3 ++- src/Symfony/Bridge/Twig/Tests/Extension/child_label.html.twig | 2 +- .../Tests/Templating/Helper/FormHelperDivLayoutTest.php | 1 + .../Tests/Templating/Helper/FormHelperTableLayoutTest.php | 1 + .../Templating/Helper/Resources/Child/form_label.html.php | 2 +- 8 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bridge/Twig/CHANGELOG.md b/src/Symfony/Bridge/Twig/CHANGELOG.md index 31d0045528..630fc2a87f 100644 --- a/src/Symfony/Bridge/Twig/CHANGELOG.md +++ b/src/Symfony/Bridge/Twig/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 2.1.0 ----- + * added global variables access in a form theme * added TwigEngine * added TwigExtractor * added a csrf_token function diff --git a/src/Symfony/Bridge/Twig/Extension/FormExtension.php b/src/Symfony/Bridge/Twig/Extension/FormExtension.php index d21fe056ca..310198864b 100644 --- a/src/Symfony/Bridge/Twig/Extension/FormExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/FormExtension.php @@ -259,9 +259,11 @@ class FormExtension extends \Twig_Extension if (isset($blocks[$types[$typeIndex]])) { $this->varStack[$rendering]['typeIndex'] = $typeIndex; + $context = $this->environment->mergeGlobals($this->varStack[$rendering]['variables']); + // we do not call renderBlock here to avoid too many nested level calls (XDebug limits the level to 100 by default) ob_start(); - $this->template->displayBlock($types[$typeIndex], $this->varStack[$rendering]['variables'], $blocks); + $this->template->displayBlock($types[$typeIndex], $context, $blocks); $html = ob_get_clean(); if ($mainTemplate) { diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php index b460d75ea7..c2f8ed19e4 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php @@ -52,9 +52,10 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest 'custom_widgets.html.twig', )); - $environment = new \Twig_Environment($loader); + $environment = new \Twig_Environment($loader, array('strict_variables' => true)); $environment->addExtension($this->extension); $environment->addExtension(new TranslationExtension(new StubTranslator())); + $environment->addGlobal('global', ''); $this->extension->initRuntime($environment); } diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php index 5034701ccd..dc979b9fed 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php @@ -52,9 +52,10 @@ class FormExtensionTableLayoutTest extends AbstractTableLayoutTest 'custom_widgets.html.twig', )); - $environment = new \Twig_Environment($loader); + $environment = new \Twig_Environment($loader, array('strict_variables' => true)); $environment->addExtension($this->extension); $environment->addExtension(new TranslationExtension(new StubTranslator())); + $environment->addGlobal('global', ''); $this->extension->initRuntime($environment); } diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/child_label.html.twig b/src/Symfony/Bridge/Twig/Tests/Extension/child_label.html.twig index 061ef428c2..8c7c248990 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/child_label.html.twig +++ b/src/Symfony/Bridge/Twig/Tests/Extension/child_label.html.twig @@ -1,3 +1,3 @@ {% block form_label %} - + {% endblock form_label %} diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperDivLayoutTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperDivLayoutTest.php index b4878d4baa..7d3a6f1b79 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperDivLayoutTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperDivLayoutTest.php @@ -33,6 +33,7 @@ class FormHelperDivLayoutTest extends AbstractDivLayoutTest $templateNameParser = new StubTemplateNameParser($root, $rootTheme); $loader = new FilesystemLoader(array()); $engine = new PhpEngine($templateNameParser, $loader); + $engine->addGlobal('global', ''); $this->helper = new FormHelper($engine, $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface'), array('FrameworkBundle:Form')); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperTableLayoutTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperTableLayoutTest.php index 22c1e198c8..21a2645972 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperTableLayoutTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperTableLayoutTest.php @@ -33,6 +33,7 @@ class FormHelperTableLayoutTest extends AbstractTableLayoutTest $templateNameParser = new StubTemplateNameParser($root, $rootTheme); $loader = new FilesystemLoader(array()); $engine = new PhpEngine($templateNameParser, $loader); + $engine->addGlobal('global', ''); $this->helper = new FormHelper($engine, $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface'), array( 'FrameworkBundle:Form', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Child/form_label.html.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Child/form_label.html.php index 3dec64b47e..0c1af407cb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Child/form_label.html.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/Resources/Child/form_label.html.php @@ -1 +1 @@ - +