Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ac6d605

Browse files
committed
bug #24535 [TwigBridge] fix BC for FormExtension if renderer is FormRenderer (dmaicher)
This PR was squashed before being merged into the 3.4 branch (closes #24535). Discussion ---------- [TwigBridge] fix BC for FormExtension if renderer is FormRenderer | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #24533 | License | MIT | Doc PR | - This fixes some issues within FormExtension since the renderer is now a `FormRenderer`. Commits ------- 4a2f608 [TwigBridge] fix BC for FormExtension if renderer is FormRenderer
2 parents f53229c + 4a2f608 commit ac6d605

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

src/Symfony/Bridge/Twig/Extension/FormExtension.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function initRuntime(Environment $environment)
5454
{
5555
if ($this->renderer instanceof TwigRendererInterface) {
5656
$this->renderer->setEnvironment($environment);
57-
} elseif (null !== $this->renderer) {
57+
} elseif (is_array($this->renderer)) {
5858
$this->renderer[2] = $environment;
5959
}
6060
}
@@ -118,7 +118,7 @@ public function __get($name)
118118

119119
if (is_array($this->renderer)) {
120120
$renderer = $this->renderer[0]->get($this->renderer[1]);
121-
if (isset($this->renderer[2])) {
121+
if (isset($this->renderer[2]) && $renderer instanceof TwigRendererInterface) {
122122
$renderer->setEnvironment($this->renderer[2]);
123123
}
124124
$this->renderer = $renderer;
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\Twig\Tests\Extension;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bridge\Twig\Extension\FormExtension;
16+
use Symfony\Bridge\Twig\Form\TwigRendererInterface;
17+
use Symfony\Component\DependencyInjection\ContainerInterface;
18+
use Symfony\Component\Form\FormRendererInterface;
19+
use Twig\Environment;
20+
21+
/**
22+
* @group legacy
23+
*/
24+
class FormExtensionTest extends TestCase
25+
{
26+
/**
27+
* @dataProvider rendererDataProvider
28+
*/
29+
public function testInitRuntimeAndAccessRenderer($rendererConstructor, $expectedAccessedRenderer)
30+
{
31+
$extension = new FormExtension($rendererConstructor);
32+
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
33+
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
34+
}
35+
36+
/**
37+
* @dataProvider rendererDataProvider
38+
*/
39+
public function testAccessRendererAndInitRuntime($rendererConstructor, $expectedAccessedRenderer)
40+
{
41+
$extension = new FormExtension($rendererConstructor);
42+
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
43+
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
44+
}
45+
46+
public function rendererDataProvider()
47+
{
48+
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
49+
$twigRenderer->expects($this->once())
50+
->method('setEnvironment');
51+
52+
yield array($twigRenderer, $twigRenderer);
53+
54+
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
55+
$twigRenderer->expects($this->once())
56+
->method('setEnvironment');
57+
58+
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
59+
$container->expects($this->once())
60+
->method('get')
61+
->with('service_id')
62+
->willReturn($twigRenderer);
63+
64+
yield array(array($container, 'service_id'), $twigRenderer);
65+
66+
$formRenderer = $this->getMockBuilder(FormRendererInterface::class)->getMock();
67+
68+
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
69+
$container->expects($this->once())
70+
->method('get')
71+
->with('service_id')
72+
->willReturn($formRenderer);
73+
74+
yield array(array($container, 'service_id'), $formRenderer);
75+
}
76+
}

src/Symfony/Bridge/Twig/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"require-dev": {
2323
"fig/link-util": "^1.0",
2424
"symfony/asset": "~2.8|~3.0|~4.0",
25+
"symfony/dependency-injection": "~2.8|~3.0|~4.0",
2526
"symfony/finder": "~2.8|~3.0|~4.0",
2627
"symfony/form": "~3.4|~4.0",
2728
"symfony/http-foundation": "^3.3.11|~4.0",

0 commit comments

Comments
 (0)