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; + } }