8000 [TwigBundle] Add "use_yield" option to allow opting in for this new r… · symfony/symfony@3c1492c · GitHub
[go: up one dir, main page]

Skip to content

Commit 3c1492c

Browse files
[TwigBundle] Add "use_yield" option to allow opting in for this new rendering mode and skip a deprecation
1 parent 2bfac0d commit 3c1492c

34 files changed

+67
-56
lines changed

src/Symfony/Bridge/Twig/Form/TwigRendererEngine.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Form\FormView;
1616
use Twig\Environment;
1717
use Twig\Template;
18+
use Twig\YieldingTemplate;
1819

1920
/**
2021
* @author Bernhard Schussek <bschussek@gmail.com>
@@ -46,6 +47,10 @@ public function renderBlock(FormView $view, $resource, string $blockName, array
4647

4748
$context = $this->environment->mergeGlobals($variables);
4849

50+
if ($this->template instanceof YieldingTemplate) {
51+
return $this->template->renderBlock($blockName, $context, $this->resources[$cacheKey]);
52+
}
53+
4954
ob_start();
5055

5156
// By contract,This method can only be called after getting the resource

src/Symfony/Bridge/Twig/Tests/Command/DebugCommandTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public static function getDebugTemplateNameTestData()
138138
(None) templates%e%A
139139
%A
140140
@Twig templates/bundles/TwigBundle%e%A
141-
vendors/twig-bundle/Resources/views%e%A
141+
vendors/twig-bundle/Resources/views%e%A
142142
----------- -------------------------------------%A
143143
144144
@@ -305,7 +305,7 @@ public function testComplete(array $input, array $expectedSuggestions)
305305

306306
$projectDir = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures';
307307
$loader = new FilesystemLoader([], $projectDir);
308-
$environment = new Environment($loader);
308+
$environment = new Environment($loader, ['use_yield' => true]);
309309

310310
$application = new Application();
311311
$application->add(new DebugCommand($environment, $projectDir, [], null, null));
@@ -337,7 +337,7 @@ private function createCommandTester(array $paths = [], array $bundleMetadata =
337337
$loader = new ChainLoader([$loader]);
338338
}
339339

340-
$environment = new Environment($loader);
340+
$environment = new Environment($loader, ['use_yield' => true]);
341341
foreach ($globals as $name => $value) {
342342
$environment->addGlobal($name, $value);
343343
}

src/Symfony/Bridge/Twig/Tests/Command/LintCommandTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ private function createCommandTester(): CommandTester
162162

163163
private function createCommand(): Command
164164
{
165-
$environment = new Environment(new FilesystemLoader(\dirname(__DIR__).'/Fixtures/templates/'));
165+
$environment = new Environment(new FilesystemLoader(\dirname(__DIR__).'/Fixtures/templates/'), ['use_yield' => true]);
166166
$environment->addFilter(new TwigFilter('deprecated_filter', function ($v) {
167167
return $v;
168168
}, ['deprecated' => true]));

src/Symfony/Bridge/Twig/Tests/ErrorRenderer/TwigErrorRendererTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function testFallbackToNativeRendererIfCustomTemplateNotFound()
4040
{
4141
$exception = new NotFoundHttpException();
4242

43-
$twig = new Environment(new ArrayLoader([]));
43+
$twig = new Environment(new ArrayLoader([]), ['use_yield' => true]);
4444

4545
$nativeRenderer = $this->createMock(HtmlErrorRenderer::class);
4646
$nativeRenderer
@@ -57,7 +57,7 @@ public function testRenderCustomErrorTemplate()
5757
{
5858
$twig = new Environment(new ArrayLoader([
5959
'@Twig/Exception/error404.html.twig' => '<h1>Page Not Found</h1>',
60-
]));
60+
]), ['use_yield' => true]);
6161
$exception = (new TwigErrorRenderer($twig))->render(new NotFoundHttpException());
6262

6363
$this->assertSame('<h1>Page Not Found</h1>', $exception->getAsString());

src/Symfony/Bridge/Twig/Tests/Extension/CodeExtensionTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ public function testFormatArgsIntegration()
116116
$this->assertEquals($expected, $this->render($template, $data));
117117
}
118118

119-
120119
public function testFormatFileIntegration()
121120
{
122121
$template = <<<'TWIG'
@@ -156,7 +155,7 @@ private function render(string $template, array $context = [])
156155
{
157156
$twig = new Environment(
158157
new ArrayLoader(['index' => $template]),
159-
['debug' => true]
158+
['debug' => true, 'use_yield' => true]
160159
);
161160
$twig->addExtension($this->getExtension());
162161

src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public function testDumpTag($template, $debug, $expectedOutput, $expectedDumped)
3232
'debug' => $debug,
3333
'cache' => false,
3434
'optimizations' => 0,
35+
'use_yield' => true,
3536
]);
3637
$twig->addExtension($extension);
3738

@@ -72,6 +73,7 @@ public function testDump($context, $args, $expectedOutput, $debug = true)
7273
'debug' => $debug,
7374
'cache' => false,
7475
'optimizations' => 0,
76+
'use_yield' => true,
7577
]);
7678

7779
array_unshift($args, $context);
@@ -129,6 +131,7 @@ public function testCustomDumper()
129131
'debug' => true,
130132
'cache' => false,
131133
'optimizations' => 0,
134+
'use_yield' => true,
132135
]);
133136

134137
$dump = $extension->dump($twig, [], 'foo');

src/Symfony/Bridge/Twig/Tests/Extension/ExpressionExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ExpressionExtensionTest extends TestCase
2121
public function testExpressionCreation()
2222
{
2323
$template = "{{ expression('1 == 1') }}";
24-
$twig = new Environment(new ArrayLoader(['template' => $template]), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0]);
24+
$twig = new Environment(new ArrayLoader(['template' => $template]), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0, 'use_yield' => true]);
2525
$twig->addExtension(new ExpressionExtension());
2626

2727
$output = $twig->render('template');

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3HorizontalLayoutTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected function setUp(): void
4343
__DIR__.'/Fixtures/templates/form',
4444
]);
4545

46-
$environment = new Environment($loader, ['strict_variables' => true]);
46+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4747
$environment->addExtension(new TranslationExtension(new StubTranslator()));
4848
$environment->addExtension(new FormExtension());
4949

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3LayoutTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ protected function setUp(): void
3939
__DIR__.'/Fixtures/templates/form',
4040
]);
4141

42-
$environment = new Environment($loader, ['strict_variables' => true]);
42+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4343
$environment->addExtension(new TranslationExtension(new StubTranslator()));
4444
$environment->addExtension(new FormExtension());
4545

@@ -80,7 +80,7 @@ public function testMoneyWidgetInIso()
8080
$environment = new Environment(new FilesystemLoader([
8181
__DIR__.'/../../Resources/views/Form',
8282
__DIR__.'/Fixtures/templates/form',
83-
]), ['strict_variables' => true]);
83+
]), ['strict_variables' => true, 'use_yield' => true]);
8484
$environment->addExtension(new TranslationExtension(new StubTranslator()));
8585
$environment->addExtension(new FormExtension());
8686
$environment->setCharset('ISO-8859-1');

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap4HorizontalLayoutTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected function setUp(): void
4545
__DIR__.'/Fixtures/templates/form',
4646
]);
4747

48-
$environment = new Environment($loader, ['strict_variables' => true]);
48+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4949
$environment->addExtension(new TranslationExtension(new StubTranslator()));
5050
$environment->addExtension(new FormExtension());
5151

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap4LayoutTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected function setUp(): void
4343
__DIR__.'/Fixtures/templates/form',
4444
]);
4545

46-
$environment = new Environment($loader, ['strict_variables' => true]);
46+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4747
$environment->addExtension(new TranslationExtension(new StubTranslator()));
4848
$environment->addExtension(new FormExtension());
4949

@@ -84,7 +84,7 @@ public function testMoneyWidgetInIso()
8484
$environment = new Environment(new FilesystemLoader([
8585
__DIR__.'/../../Resources/views/Form',
8686
__DIR__.'/Fixtures/templates/form',
87-
]), ['strict_variables' => true]);
87+
]), ['strict_variables' => true, 'use_yield' => true]);
8888
$environment->addExtension(new TranslationExtension(new StubTranslator()));
8989
$environment->addExtension(new FormExtension());
9090
$environment->setCharset('ISO-8859-1');

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap5HorizontalLayoutTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected function setUp(): void
4545
__DIR__.'/Fixtures/templates/form',
4646
]);
4747

48-
$environment = new Environment($loader, ['strict_variables' => true]);
48+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4949
$environment->addExtension(new TranslationExtension(new StubTranslator()));
5050
$environment->addExtension(new FormExtension());
5151

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap5LayoutTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected function setUp(): void
4646
__DIR__.'/Fixtures/templates/form',
4747
]);
4848

49-
$environment = new Environment($loader, ['strict_variables' => true]);
49+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
5050
$environment->addExtension(new TranslationExtension(new StubTranslator()));
5151
$environment->addExtension(new FormExtension());
5252

@@ -87,7 +87,7 @@ public function testMoneyWidgetInIso()
8787
$environment = new Environment(new FilesystemLoader([
8888
__DIR__.'/../../Resources/views/Form',
8989
__DIR__.'/Fixtures/templates/form',
90-
]), ['strict_variables' => true]);
90+
]), ['strict_variables' => true, 'use_yield' => true]);
9191
$environment->addExtension(new TranslationExtension(new StubTranslator()));
9292
$environment->addExtension(new FormExtension());
9393
$environment->setCharset('ISO-8859-1');

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected function setUp(): void
4141
__DIR__.'/Fixtures/templates/form',
4242
]);
4343

44-
$environment = new Environment($loader, ['strict_variables' => true]);
44+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4545
$environment->addExtension(new TranslationExtension(new StubTranslator()));
4646
$environment->addGlobal('global', '');
4747
// the value can be any template that exists
@@ -171,7 +171,7 @@ public function testMoneyWidgetInIso()
171171
$environment = new Environment(new FilesystemLoader([
172172
__DIR__.'/../../Resources/views/Form',
173173
__DIR__.'/Fixtures/templates/form',
174-
]), ['strict_variables' => true]);
174+
]), ['strict_variables' => true, 'use_yield' => true]);
175175
$environment->addExtension(new TranslationExtension(new StubTranslator()));
176176
$environment->addExtension(new FormExtension());
177177
$environment->setCharset('ISO-8859-1');

src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ protected function setUp(): void
4040
__DIR__.'/Fixtures/templates/form',
4141
]);
4242

43-
$environment = new Environment($loader, ['strict_variables' => true]);
43+
$environment = new Environment($loader, ['strict_variables' => true, 'use_yield' => true]);
4444
$environment->addExtension(new TranslationExtension(new StubTranslator()));
4545
$environment->addGlobal('global', '');
4646
$environment->addExtension(new FormExtension());

src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function testGenerateFragmentUri()
7575
{{ fragment_uri(controller("%s::templateAction", {template: "foo.html.twig"})) }}
7676
TWIG
7777
, TemplateController::class), ]);
78-
$twig = new Environment($loader, ['debug' => true, 'cache' => false]);
78+
$twig = new Environment($loader, ['debug' => true, 'cache' => false, 'use_yield' => true]);
7979
$twig->addExtension(new HttpKernelExtension());
8080

8181
$loader = $this->createMock(RuntimeLoaderInterface::class);
@@ -103,7 +103,7 @@ protected function getFragmentHandler($return)
103103
protected function renderTemplate(FragmentHandler $renderer, $template = '{{ render("foo") }}')
104104
{
105105
$loader = new ArrayLoader(['index' => $template]);
106-
$twig = new Environment($loader, ['debug' => true, 'cache' => false]);
106+
$twig = new Environment($loader, ['debug' => true, 'cache' => false, 'use_yield' => true]);
107107
$twig->addExtension(new HttpKernelExtension());
108108

109109
$loader = $this->createMock(RuntimeLoaderInterface::class);

src/Symfony/Bridge/Twig/Tests/Extension/RoutingExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class RoutingExtensionTest extends TestCase
2626
*/
2727
public function testEscaping($template, $mustBeEscaped)
2828
{
29-
$twig = new Environment($this->createMock(LoaderInterface::class), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0]);
29+
$twig = new Environment($this->createMock(LoaderInterface::class), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0, 'use_yield' => true]);
3030
$twig->addExtension(new RoutingExtension($this->createMock(UrlGeneratorInterface::class)));
3131

3232
$nodes = $twig->parse($twig->tokenize(new Source($template, '')));

src/Symfony/Bridge/Twig/Tests/Extension/SerializerExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private function getTwig(string $template): Environment
6161
])
6262
;
6363

64-
$twig = new Environment(new ArrayLoader(['template' => $template]));
64+
$twig = new Environment(new ArrayLoader(['template' => $template, 'use_yield' => true]));
6565
$twig->addExtension(new SerializerExtension());
6666
$twig->addRuntimeLoader($mockRuntimeLoader);
6767

src/Symfony/Bridge/Twig/Tests/Extension/StopwatchExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function testFailIfStoppingWrongEvent()
3232
*/
3333
public function testTiming($template, $events)
3434
{
35-
$twig = new Environment(new ArrayLoader(['template' => $template]), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0]);
35+
$twig = new Environment(new ArrayLoader(['template' => $template]), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0, 'use_yield' => true]);
3636
$twig->addExtension(new StopwatchExtension($this->getStopwatch($events)));
3737

3838
try {

src/Symfony/Bridge/Twig/Tests/Extension/TranslationExtensionTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function testTrans($template, $expected, array $variables = [])
3737
if ($expected != $this->getTemplate($template)->render($variables)) {
3838
echo $template."\n";
3939
$loader = new TwigArrayLoader(['index' => $template]);
40-
$twig = new Environment($loader, ['debug' => true, 'cache' => false]);
40+
$twig = new Environment($loader, ['debug' => true, 'cache' => false, 'use_yield' => true]);
4141
$twig->addExtension(new TranslationExtension(new Translator('en')));
4242

4343
echo $twig->compile($twig->parse($twig->tokenize($twig->getLoader()->getSourceContext('index'))))."\n\n";
@@ -217,7 +217,7 @@ private function getTemplate($template, ?TranslatorInterface $translator = null)
217217
} else {
218218
$loader = new TwigArrayLoader(['index' => $template]);
219219
}
220-
$twig = new Environment($loader, ['debug' => true, 'cache' => false]);
220+
$twig = new Environment($loader, ['debug' => true, 'cache' => false, 'use_yield' => true]);
221221
$twig->addExtension(new TranslationExtension($translator));
222222

223223
return $twig->load('index');

src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public function testRenderedOnce()
8383
{
8484
$twig = new Environment(new ArrayLoader([
8585
'text' => 'Text',
86-
]));
86+
]), ['use_yield' => true]);
8787
$renderer = new BodyRenderer($twig);
8888
$email = (new TemplatedEmail())
8989
->to('fabien@symfony.com')
@@ -104,7 +104,7 @@ public function testRenderedOnceUnserializableContext()
104104
{
105105
$twig = new Environment(new ArrayLoader([
106106
'text' => 'Text',
107-
]));
107+
]), ['use_yield' => true]);
108108
$renderer = new BodyRenderer($twig);
109109
$email = (new TemplatedEmail())
110110
->to('fabien@symfony.com')
@@ -128,7 +128,7 @@ private function prepareEmail(?string $text, ?string $html, array $context = [])
128128
'html' => $html,
129129
'document.txt' => 'Some text document...',
130130
'image.jpg' => 'Some image data',
131-
]));
131+
]), ['use_yield' => true]);
132132
$renderer = new BodyRenderer($twig);
133133
$email = (new TemplatedEmail())
134134
->to('fabien@symfony.com')

src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function testNoVar()
2525
{
2626
$node = new DumpNode('bar', null, 7);
2727

28-
$env = new Environment($this->createMock(LoaderInterface::class));
28+
$env = new Environment($this->createMock(LoaderInterface::class), ['use_yield' => true]);
2929
$compiler = new Compiler($env);
3030

3131
$expected = <<<'EOTXT'
@@ -49,7 +49,7 @@ public function testIndented()
4949
{
5050
$node = new DumpNode('bar', null, 7);
5151

52-
$env = new Environment($this->createMock(LoaderInterface::class));
52+
$env = new Environment($this->createMock(LoaderInterface::class), ['use_yield' => true]);
5353
$compiler = new Compiler($env);
5454

5555
$expected = <<<'EOTXT'
@@ -76,7 +76,7 @@ public function testOneVar()
7676
]);
7777
$node = new DumpNode('bar', $vars, 7);
7878

79-
$env = new Environment($this->createMock(LoaderInterface::class));
79+
$env = new Environment($this->createMock(LoaderInterface::class), ['use_yield' => true]);
8080
$compiler = new Compiler($env);
8181

8282
$expected = <<<'EOTXT'
@@ -100,7 +100,7 @@ public function testMultiVars()
100100
]);
101101
$node = new DumpNode('bar', $vars, 7);
102102

103-
$env = new Environment($this->createMock(LoaderInterface::class));
103+
$env = new Environment($this->createMock(LoaderInterface::class), ['use_yield' => true]);
104104
$compiler = new Compiler($env);
105105

106106
$expected = <<<'EOTXT'

src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public function testCompile()
5555

5656
$node = new FormThemeNode($form, $resources, 0);
5757

58-
$environment = new Environment($this->createMock(LoaderInterface::class));
58+
$environment = new Environment($this->createMock(LoaderInterface::class), ['use_yield' => true]);
5959
$formRenderer = new FormRenderer($this->createMock(FormRendererEngineInterface::class));
6060
$this->registerTwigRuntimeLoader($environment, $formRenderer);
6161
$compiler = new Compiler($environment);

0 commit comments

Comments
 (0)
0