fixed circular reference in Twig Form integration
This commit is contained in:
parent
4b5e412d2c
commit
b515702fc9
@ -1,6 +1,12 @@
|
||||
CHANGELOG
|
||||
=========
|
||||
|
||||
3.2.0
|
||||
-----
|
||||
|
||||
* Deprecated the possibility to inject the Form Twig Renderer into the form
|
||||
extension. Inject it on TwigRendererEngine instead.
|
||||
|
||||
2.7.0
|
||||
-----
|
||||
|
||||
|
@ -23,17 +23,26 @@ use Symfony\Component\Form\ChoiceList\View\ChoiceView;
|
||||
*/
|
||||
class FormExtension extends \Twig_Extension implements \Twig_Extension_InitRuntimeInterface
|
||||
{
|
||||
public function __construct(TwigRendererInterface $renderer)
|
||||
private $renderer;
|
||||
|
||||
public function __construct(TwigRendererInterface $renderer = null)
|
||||
{
|
||||
if (null !== $this->renderer) {
|
||||
@trigger_error(sprintf('Passing a Twig Form Renderer to the "%s" constructor is deprecated since version 3.2 and won\'t be possible in 4.0. Pass the Twig_Environment to the TwigRendererEngine constructor instead.', static::class), E_USER_DEPRECATED);
|
||||
}
|
||||
$this->renderer = $renderer;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* To be removed in 4.0
|
||||
*/
|
||||
public function initRuntime(\Twig_Environment $environment)
|
||||
{
|
||||
$this->renderer->setEnvironment($environment);
|
||||
if (null !== $this->renderer) {
|
||||
$this->renderer->setEnvironment($environment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,6 +29,16 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
*/
|
||||
private $template;
|
||||
|
||||
public function __construct(array $defaultThemes = array(), \Twig_Environment $environment = null)
|
||||
{
|
||||
if (null === $environment) {
|
||||
@trigger_error(sprintf('Not passing a Twig Environment as the second argument for "%s" constructor is deprecated since version 3.2 and won\'t be possible in 4.0.', static::class), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
parent::__construct($defaultThemes);
|
||||
$this->environment = $environment;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
@ -15,6 +15,8 @@ use Symfony\Component\Form\FormRendererEngineInterface;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @deprecated Deprecated since version 3.2, to be removed in 4.0.
|
||||
*/
|
||||
interface TwigRendererEngineInterface extends FormRendererEngineInterface
|
||||
{
|
||||
|
@ -15,6 +15,8 @@ use Symfony\Component\Form\FormRendererInterface;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @deprecated Deprecated since version 3.2, to be removed in 4.0.
|
||||
*/
|
||||
interface TwigRendererInterface extends FormRendererInterface
|
||||
{
|
||||
|
@ -34,13 +34,6 @@ class FormExtensionBootstrap3HorizontalLayoutTest extends AbstractBootstrap3Hori
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'bootstrap_3_horizontal_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
));
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$extension = new FormExtension($this->renderer);
|
||||
|
||||
$loader = new StubFilesystemLoader(array(
|
||||
__DIR__.'/../../Resources/views/Form',
|
||||
__DIR__.'/Fixtures/templates/form',
|
||||
@ -48,8 +41,13 @@ class FormExtensionBootstrap3HorizontalLayoutTest extends AbstractBootstrap3Hori
|
||||
|
||||
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
||||
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
||||
$environment->addExtension($extension);
|
||||
$extension->initRuntime($environment);
|
||||
$environment->addExtension(new FormExtension());
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'bootstrap_3_horizontal_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
), $environment);
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$this->registerTwigRuntimeLoader($environment, $this->renderer);
|
||||
}
|
||||
|
||||
|
@ -30,13 +30,6 @@ class FormExtensionBootstrap3LayoutTest extends AbstractBootstrap3LayoutTest
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'bootstrap_3_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
));
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$extension = new FormExtension($this->renderer);
|
||||
|
||||
$loader = new StubFilesystemLoader(array(
|
||||
__DIR__.'/../../Resources/views/Form',
|
||||
__DIR__.'/Fixtures/templates/form',
|
||||
@ -44,8 +37,13 @@ class FormExtensionBootstrap3LayoutTest extends AbstractBootstrap3LayoutTest
|
||||
|
||||
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
||||
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
||||
$environment->addExtension($extension);
|
||||
$extension->initRuntime($environment);
|
||||
$environment->addExtension(new FormExtension());
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'bootstrap_3_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
), $environment);
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$this->registerTwigRuntimeLoader($environment, $this->renderer);
|
||||
}
|
||||
|
||||
|
@ -31,13 +31,6 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'form_div_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
));
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$extension = new FormExtension($this->renderer);
|
||||
|
||||
$loader = new StubFilesystemLoader(array(
|
||||
__DIR__.'/../../Resources/views/Form',
|
||||
__DIR__.'/Fixtures/templates/form',
|
||||
@ -48,8 +41,13 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
||||
$environment->addGlobal('global', '');
|
||||
// the value can be any template that exists
|
||||
$environment->addGlobal('dynamic_template_name', 'child_label');
|
||||
$environment->addExtension($extension);
|
||||
$extension->initRuntime($environment);
|
||||
$environment->addExtension(new FormExtension());
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'form_div_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
), $environment);
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$this->registerTwigRuntimeLoader($environment, $this->renderer);
|
||||
}
|
||||
|
||||
|
@ -30,13 +30,6 @@ class FormExtensionTableLayoutTest extends AbstractTableLayoutTest
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'form_table_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
));
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$extension = new FormExtension($this->renderer);
|
||||
|
||||
$loader = new StubFilesystemLoader(array(
|
||||
__DIR__.'/../../Resources/views/Form',
|
||||
__DIR__.'/Fixtures/templates/form',
|
||||
@ -45,8 +38,13 @@ class FormExtensionTableLayoutTest extends AbstractTableLayoutTest
|
||||
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
||||
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
||||
$environment->addGlobal('global', '');
|
||||
$environment->addExtension($extension);
|
||||
$extension->initRuntime($environment);
|
||||
$environment->addExtension(new FormExtension());
|
||||
|
||||
$rendererEngine = new TwigRendererEngine(array(
|
||||
'form_table_layout.html.twig',
|
||||
'custom_widgets.html.twig',
|
||||
), $environment);
|
||||
$this->renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface'));
|
||||
$this->registerTwigRuntimeLoader($environment, $this->renderer);
|
||||
}
|
||||
|
||||
|
@ -116,14 +116,13 @@
|
||||
<argument type="service" id="router.request_context" on-invalid="ignore" />
|
||||
</service>
|
||||
|
||||
<service id="twig.extension.form" class="Symfony\Bridge\Twig\Extension\FormExtension" public="false">
|
||||
<argument type="service" id="twig.form.renderer" />
|
||||
</service>
|
||||
<service id="twig.extension.form" class="Symfony\Bridge\Twig\Extension\FormExtension" public="false" />
|
||||
|
||||
<service id="twig.extension.debug" class="Twig_Extension_Debug" public="false" />
|
||||
|
||||
<service id="twig.form.engine" class="Symfony\Bridge\Twig\Form\TwigRendererEngine" public="false">
|
||||
<argument>%twig.form.resources%</argument>
|
||||
<argument type="service" id="twig" />
|
||||
</service>
|
||||
|
||||
<service id="twig.form.renderer" class="Symfony\Bridge\Twig\Form\TwigRenderer">
|
||||
|
Reference in New Issue
Block a user