[TwigBridge] fix BC for FormExtension if renderer is FormRenderer
This commit is contained in:
parent
0f5e38c732
commit
4a2f608f1e
@ -54,7 +54,7 @@ class FormExtension extends AbstractExtension implements InitRuntimeInterface
|
|||||||
{
|
{
|
||||||
if ($this->renderer instanceof TwigRendererInterface) {
|
if ($this->renderer instanceof TwigRendererInterface) {
|
||||||
$this->renderer->setEnvironment($environment);
|
$this->renderer->setEnvironment($environment);
|
||||||
} elseif (null !== $this->renderer) {
|
} elseif (is_array($this->renderer)) {
|
||||||
$this->renderer[2] = $environment;
|
$this->renderer[2] = $environment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,7 +118,7 @@ class FormExtension extends AbstractExtension implements InitRuntimeInterface
|
|||||||
|
|
||||||
if (is_array($this->renderer)) {
|
if (is_array($this->renderer)) {
|
||||||
$renderer = $this->renderer[0]->get($this->renderer[1]);
|
$renderer = $this->renderer[0]->get($this->renderer[1]);
|
||||||
if (isset($this->renderer[2])) {
|
if (isset($this->renderer[2]) && $renderer instanceof TwigRendererInterface) {
|
||||||
$renderer->setEnvironment($this->renderer[2]);
|
$renderer->setEnvironment($this->renderer[2]);
|
||||||
}
|
}
|
||||||
$this->renderer = $renderer;
|
$this->renderer = $renderer;
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Bridge\Twig\Tests\Extension;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bridge\Twig\Extension\FormExtension;
|
||||||
|
use Symfony\Bridge\Twig\Form\TwigRendererInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
use Symfony\Component\Form\FormRendererInterface;
|
||||||
|
use Twig\Environment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
|
class FormExtensionTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @dataProvider rendererDataProvider
|
||||||
|
*/
|
||||||
|
public function testInitRuntimeAndAccessRenderer($rendererConstructor, $expectedAccessedRenderer)
|
||||||
|
{
|
||||||
|
$extension = new FormExtension($rendererConstructor);
|
||||||
|
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
|
||||||
|
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider rendererDataProvider
|
||||||
|
*/
|
||||||
|
public function testAccessRendererAndInitRuntime($rendererConstructor, $expectedAccessedRenderer)
|
||||||
|
{
|
||||||
|
$extension = new FormExtension($rendererConstructor);
|
||||||
|
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
|
||||||
|
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rendererDataProvider()
|
||||||
|
{
|
||||||
|
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
|
||||||
|
$twigRenderer->expects($this->once())
|
||||||
|
->method('setEnvironment');
|
||||||
|
|
||||||
|
yield array($twigRenderer, $twigRenderer);
|
||||||
|
|
||||||
|
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
|
||||||
|
$twigRenderer->expects($this->once())
|
||||||
|
->method('setEnvironment');
|
||||||
|
|
||||||
|
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
|
||||||
|
$container->expects($this->once())
|
||||||
|
->method('get')
|
||||||
|
->with('service_id')
|
||||||
|
->willReturn($twigRenderer);
|
||||||
|
|
||||||
|
yield array(array($container, 'service_id'), $twigRenderer);
|
||||||
|
|
||||||
|
$formRenderer = $this->getMockBuilder(FormRendererInterface::class)->getMock();
|
||||||
|
|
||||||
|
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
|
||||||
|
$container->expects($this->once())
|
||||||
|
->method('get')
|
||||||
|
->with('service_id')
|
||||||
|
->willReturn($formRenderer);
|
||||||
|
|
||||||
|
yield array(array($container, 'service_id'), $formRenderer);
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,7 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fig/link-util": "^1.0",
|
"fig/link-util": "^1.0",
|
||||||
"symfony/asset": "~2.8|~3.0|~4.0",
|
"symfony/asset": "~2.8|~3.0|~4.0",
|
||||||
|
"symfony/dependency-injection": "~2.8|~3.0|~4.0",
|
||||||
"symfony/finder": "~2.8|~3.0|~4.0",
|
"symfony/finder": "~2.8|~3.0|~4.0",
|
||||||
"symfony/form": "~3.4|~4.0",
|
"symfony/form": "~3.4|~4.0",
|
||||||
"symfony/http-foundation": "^3.3.11|~4.0",
|
"symfony/http-foundation": "^3.3.11|~4.0",
|
||||||
|
Reference in New Issue
Block a user