diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php index 7570126fa80eb..12eaad3796081 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php @@ -61,7 +61,7 @@ public function enterNode(Node $node, Environment $env): Node return $node; } - if ($node instanceof FilterExpression && 'trans' === $node->getNode('filter')->getAttribute('value')) { + if ($node instanceof FilterExpression && 'trans' === ($node->hasAttribute('twig_callable') ? $node->getAttribute('twig_callable')->getName() : $node->getNode('filter')->getAttribute('value'))) { $arguments = $node->getNode('arguments'); if ($this->isNamedArguments($arguments)) { if (!$arguments->hasNode('domain') && !$arguments->hasNode(1)) { diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php index 39cd4b142af10..274f6111048e9 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php @@ -57,7 +57,7 @@ public function enterNode(Node $node, Environment $env): Node if ( $node instanceof FilterExpression && - 'trans' === $node->getNode('filter')->getAttribute('value') && + 'trans' === ($node->hasAttribute('twig_callable') ? $node->getAttribute('twig_callable')->getName() : $node->getNode('filter')->getAttribute('value')) && $node->getNode('node') instanceof ConstantExpression ) { // extract constant nodes with a trans filter @@ -85,7 +85,7 @@ public function enterNode(Node $node, Environment $env): Node ]; } elseif ( $node instanceof FilterExpression && - 'trans' === $node->getNode('filter')->getAttribute('value') && + 'trans' === ($node->hasAttribute('twig_callable') ? $node->getAttribute('twig_callable')->getName() : $node->getNode('filter')->getAttribute('value')) && $node->getNode('node') instanceof ConcatBinary && $message = $this->getConcatValueFromNode($node->getNode('node'), null) ) { diff --git a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php index b259990e0b7ad..c2fdb4e778541 100644 --- a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode; +use Twig\Attribute\FirstClassTwigCallableReady; use Twig\Compiler; use Twig\Environment; use Twig\Extension\CoreExtension; @@ -22,6 +23,7 @@ use Twig\Node\Expression\ConstantExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\TwigFunction; class SearchAndRenderBlockNodeTest extends TestCase { @@ -31,7 +33,11 @@ public function testCompileWidget() new NameExpression('form', 0), ]); - $node = new SearchAndRenderBlockNode('form_widget', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_widget'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_widget', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -54,7 +60,11 @@ public function testCompileWidgetWithVariables() ], 0), ]); - $node = new SearchAndRenderBlockNode('form_widget', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_widget'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_widget', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -74,7 +84,11 @@ public function testCompileLabelWithLabel() new ConstantExpression('my label', 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -94,7 +108,11 @@ public function testCompileLabelWithNullLabel() new ConstantExpression(null, 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -116,7 +134,11 @@ public function testCompileLabelWithEmptyStringLabel() new ConstantExpression('', 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -137,7 +159,11 @@ public function testCompileLabelWithDefaultLabel() new NameExpression('form', 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -161,7 +187,11 @@ public function testCompileLabelWithAttributes() ], 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -190,7 +220,11 @@ public function testCompileLabelWithLabelAndAttributes() ], 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -218,7 +252,11 @@ public function testCompileLabelWithLabelThatEvaluatesToNull() ), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); @@ -256,7 +294,11 @@ public function testCompileLabelWithLabelThatEvaluatesToNullAndAttributes() ], 0), ]); - $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); + } else { + $node = new SearchAndRenderBlockNode('form_label', $arguments, 0); + } $compiler = new Compiler(new Environment($this->createMock(LoaderInterface::class))); diff --git a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php index bf073602583f7..be26c9b425efc 100644 --- a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php +++ b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Bridge\Twig\NodeVisitor\TranslationNodeVisitor; +use Twig\Attribute\FirstClassTwigCallableReady; use Twig\Environment; use Twig\Loader\LoaderInterface; use Twig\Node\Expression\ArrayExpression; @@ -20,6 +21,8 @@ use Twig\Node\Expression\FilterExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\TwigFilter; +use Twig\TwigFunction; class TranslationNodeVisitorTest extends TestCase { @@ -38,15 +41,27 @@ public function testMessageExtractionWithInvalidDomainNode() { $message = 'new key'; - $node = new FilterExpression( - new ConstantExpression($message, 0), - new ConstantExpression('trans', 0), - new Node([ - new ArrayExpression([], 0), - new NameExpression('variable', 0), - ]), - 0 - ); + if (class_exists(FirstClassTwigCallableReady::class)) { + $node = new FilterExpression( + new ConstantExpression($message, 0), + new TwigFilter('trans'), + new Node([ + new ArrayExpression([], 0), + new NameExpression('variable', 0), + ]), + 0 + ); + } else { + $node = new FilterExpression( + new ConstantExpression($message, 0), + new ConstantExpression('trans', 0), + new Node([ + new ArrayExpression([], 0), + new NameExpression('variable', 0), + ]), + 0 + ); + } $this->testMessagesExtraction($node, [[$message, TranslationNodeVisitor::UNDEFINED_DOMAIN]]); } diff --git a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php index 69311afdc824d..e23b0a4fd3700 100644 --- a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php +++ b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php @@ -13,6 +13,7 @@ use Symfony\Bridge\Twig\Node\TransDefaultDomainNode; use Symfony\Bridge\Twig\Node\TransNode; +use Twig\Attribute\FirstClassTwigCallableReady; use Twig\Node\BodyNode; use Twig\Node\Expression\ArrayExpression; use Twig\Node\Expression\ConstantExpression; @@ -20,6 +21,7 @@ use Twig\Node\ModuleNode; use Twig\Node\Node; use Twig\Source; +use Twig\TwigFilter; class TwigNodeProvider { @@ -45,9 +47,18 @@ public static function getTransFilter($message, $domain = null, $arguments = nul ] : []; } + if (!class_exists(FirstClassTwigCallableReady::class)) { + return new FilterExpression( + new ConstantExpression($message, 0), + new ConstantExpression('trans', 0), + new Node($arguments), + 0 + ); + } + return new FilterExpression( new ConstantExpression($message, 0), - new ConstantExpression('trans', 0), + new TwigFilter('trans'), new Node($arguments), 0 ); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy