diff --git a/src/Core/ViewHelper/AbstractConditionViewHelper.php b/src/Core/ViewHelper/AbstractConditionViewHelper.php
index 36aa986da..1666d01e1 100644
--- a/src/Core/ViewHelper/AbstractConditionViewHelper.php
+++ b/src/Core/ViewHelper/AbstractConditionViewHelper.php
@@ -118,7 +118,7 @@ protected function renderThenChild()
foreach ($this->viewHelperNode->getChildNodes() as $childNode) {
if ($childNode instanceof ViewHelperNode
&& str_ends_with($childNode->getViewHelperClassName(), 'ThenViewHelper')) {
- $data = $childNode->evaluate($this->renderingContext);
+ $data = $childNode->evaluateChildNodes($this->renderingContext);
return $data;
}
if ($childNode instanceof ViewHelperNode
@@ -184,7 +184,7 @@ protected function renderElseChild()
$arguments = $childNode->getArguments();
if (isset($arguments['if'])) {
if ($arguments['if']->evaluate($this->renderingContext)) {
- return $childNode->evaluate($this->renderingContext);
+ return $childNode->evaluateChildNodes($this->renderingContext);
}
} elseif ($elseNode === null) {
$elseNode = $childNode;
@@ -205,7 +205,7 @@ protected function renderElseChild()
// If a f:else node exists, evaluate its content
if ($elseNode instanceof ViewHelperNode) {
- return $elseNode->evaluate($this->renderingContext);
+ return $elseNode->evaluateChildNodes($this->renderingContext);
}
// If only the condition is specified, but no then/else handling, the whole ViewHelper should
diff --git a/src/ViewHelpers/ElseViewHelper.php b/src/ViewHelpers/ElseViewHelper.php
index 8740979d2..b67ed0326 100644
--- a/src/ViewHelpers/ElseViewHelper.php
+++ b/src/ViewHelpers/ElseViewHelper.php
@@ -50,12 +50,14 @@ public function initializeArguments()
}
/**
- * @return string the rendered string
+ * Does nothing unless used in context of condition ViewHelper, such as f:if
+ *
* @api
+ * @todo consider throwing an exception here in future versions
*/
- public function render()
+ public function render(): string
{
- return $this->renderChildren();
+ return '';
}
/**
@@ -64,9 +66,9 @@ public function render()
* @param string $initializationPhpCode
* @param ViewHelperNode $node
* @param TemplateCompiler $compiler
- * @return string|null
+ * @return string
*/
- public function compile($argumentsName, $closureName, &$initializationPhpCode, ViewHelperNode $node, TemplateCompiler $compiler)
+ public function compile($argumentsName, $closureName, &$initializationPhpCode, ViewHelperNode $node, TemplateCompiler $compiler): string
{
return '\'\'';
}
diff --git a/src/ViewHelpers/ThenViewHelper.php b/src/ViewHelpers/ThenViewHelper.php
index f2369f5a2..edd0af9b4 100644
--- a/src/ViewHelpers/ThenViewHelper.php
+++ b/src/ViewHelpers/ThenViewHelper.php
@@ -25,14 +25,14 @@ class ThenViewHelper extends AbstractViewHelper
protected $escapeOutput = false;
/**
- * Just render everything.
+ * Does nothing unless used in context of condition ViewHelper, such as f:if
*
- * @return string the rendered string
* @api
+ * @todo consider throwing an exception here in future versions
*/
- public function render()
+ public function render(): string
{
- return $this->renderChildren();
+ return '';
}
/**
@@ -43,7 +43,7 @@ public function render()
* @param TemplateCompiler $compiler
* @return string
*/
- public function compile($argumentsName, $closureName, &$initializationPhpCode, ViewHelperNode $node, TemplateCompiler $compiler)
+ public function compile($argumentsName, $closureName, &$initializationPhpCode, ViewHelperNode $node, TemplateCompiler $compiler): string
{
return '\'\'';
}
diff --git a/tests/Functional/ViewHelpers/IfThenElseViewHelperTest.php b/tests/Functional/ViewHelpers/IfThenElseViewHelperTest.php
index b526af9b5..22fbb1ae8 100644
--- a/tests/Functional/ViewHelpers/IfThenElseViewHelperTest.php
+++ b/tests/Functional/ViewHelpers/IfThenElseViewHelperTest.php
@@ -566,6 +566,27 @@ public static function renderDataProvider(): \Generator
true,
];
+ yield 'f:then without f:if context' => [
+ 'foo',
+ [],
+ '',
+ ];
+ yield 'f:else without f:if context' => [
+ 'foo',
+ [],
+ '',
+ ];
+ yield 'f:else-if without f:if context, verdict true' => [
+ 'foo',
+ ['verdict' => true],
+ '',
+ ];
+ yield 'f:else-if without f:if context, verdict false' => [
+ 'foo',
+ ['verdict' => false],
+ '',
+ ];
+
/*
* @todo This should work but doesn't at the moment. This is probably related to the boolean
* parser not converting variable nodes correctly. There is a related todo in the BooleanParserTest.