From 1469e6a6bcb30b12acf267a71aa3a16ea05e83b9 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 11 Jan 2024 08:22:24 +0100 Subject: [PATCH] Add support for templates that do not have output Nodes --- src/Node/ModuleNode.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Node/ModuleNode.php b/src/Node/ModuleNode.php index ee04e2d21..a9d494e69 100644 --- a/src/Node/ModuleNode.php +++ b/src/Node/ModuleNode.php @@ -342,6 +342,9 @@ final class ModuleNode extends Node } else { $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n"); } + } elseif ($compiler->getEnvironment()->useYield() && !$this->hasNodeOutputNodes($this->getNode('body'))) { + // ensure at least one yield call even for templates with no output + $compiler->write("yield;\n"); } $compiler @@ -483,4 +486,19 @@ final class ModuleNode extends Node throw new \LogicException('Trait templates can only be constant nodes.'); } } + + private function hasNodeOutputNodes(Node $node): bool + { + if ($node instanceof NodeOutputInterface) { + return true; + } + + foreach ($node as $child) { + if ($this->hasNodeOutputNodes($child)) { + return true; + } + } + + return false; + } }