diff --git a/Classes/ViewHelpers/ApplyRenderFunctionViewHelper.php b/Classes/ViewHelpers/ApplyRenderFunctionViewHelper.php
index cf97859..02539a1 100644
--- a/Classes/ViewHelpers/ApplyRenderFunctionViewHelper.php
+++ b/Classes/ViewHelpers/ApplyRenderFunctionViewHelper.php
@@ -7,15 +7,18 @@ namespace DigiComp\FluidRenderFunctions\ViewHelpers;
use DigiComp\FluidRenderFunctions\InvokeRenderFunctionInterface;
use DigiComp\FluidRenderFunctions\Utils\GeneratorClosureIterator;
use DigiComp\FluidRenderFunctions\Utils\RenderableProxy;
+use DigiComp\FluidRenderFunctions\ViewHelpers\Traits\ValidateRenderFunctionTrait;
use Neos\FluidAdaptor\Core\ViewHelper\AbstractViewHelper;
class ApplyRenderFunctionViewHelper extends AbstractViewHelper
{
+ use ValidateRenderFunctionTrait;
+
public function initializeArguments(): void
{
parent::initializeArguments();
$this->registerArgument('in', 'mixed', 'subject to apply the render function to');
- $this->registerArgument('function', InvokeRenderFunctionInterface::class, 'render function to use', true);
+ $this->registerArgument('function', 'string', 'render function to use', true);
$this->registerArgument(
'force',
'bool',
@@ -26,6 +29,12 @@ class ApplyRenderFunctionViewHelper extends AbstractViewHelper
);
}
+ public function validateArguments()
+ {
+ parent::validateArguments();
+ $this->validateRenderFunctionArgument('function');
+ }
+
public function render()
{
$in = $this->arguments['in'];
diff --git a/Classes/ViewHelpers/RegisterRenderFunctionViewHelper.php b/Classes/ViewHelpers/RegisterRenderFunctionViewHelper.php
index 5db7772..511cae7 100644
--- a/Classes/ViewHelpers/RegisterRenderFunctionViewHelper.php
+++ b/Classes/ViewHelpers/RegisterRenderFunctionViewHelper.php
@@ -47,8 +47,9 @@ class RegisterRenderFunctionViewHelper extends AbstractViewHelper
foreach ($this->childNodes as $childNode) {
$transferNode->addChildNode($childNode);
}
- $this->renderingContext->getVariableProvider()
- ->add($this->arguments['as'], new NodeRenderTransfer($transferNode, $this->arguments['subjectName']));
+ $renderer = new NodeRenderTransfer($transferNode, $this->arguments['subjectName']);
+ $this->renderingContext->getViewHelperVariableContainer()
+ ->add(static::class, $this->arguments['as'], $renderer);
return '';
}
}
diff --git a/Classes/ViewHelpers/Traits/ValidateRenderFunctionTrait.php b/Classes/ViewHelpers/Traits/ValidateRenderFunctionTrait.php
new file mode 100644
index 0000000..c486f4d
--- /dev/null
+++ b/Classes/ViewHelpers/Traits/ValidateRenderFunctionTrait.php
@@ -0,0 +1,26 @@
+viewHelperVariableContainer->get(
+ RegisterRenderFunctionViewHelper::class,
+ $this->arguments[$argumentName]
+ );
+ if (!($renderFunction instanceof InvokeRenderFunctionInterface)) {
+ throw new \InvalidArgumentException(
+ 'render function with name "' . $this->arguments[$argumentName] . '" has not been registered.',
+ 1717293038
+ );
+ }
+ $this->arguments[$argumentName] = $renderFunction;
+ }
+}
diff --git a/README.md b/README.md
index 9dc2ced..f5f553a 100644
--- a/README.md
+++ b/README.md
@@ -13,5 +13,5 @@ FluidRenderFunctions to the rescue:
{myBook.name} from {myBook.author.name}
-
+
```
diff --git a/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Index.html b/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Index.html
index 369d8a4..ab764ae 100644
--- a/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Index.html
+++ b/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Index.html
@@ -4,5 +4,5 @@
{subject.name} is cool
- {test -> rf:applyRenderFunction(function: testFunc, force: true)}
+ {test -> rf:applyRenderFunction(function: 'testFunc', force: true)}
diff --git a/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Select.html b/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Select.html
index 1899cee..120ca49 100644
--- a/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Select.html
+++ b/Resources/Private/Templates/Tests/Functional/Fixtures/Test/Select.html
@@ -4,5 +4,5 @@
{subject.name} is cool
-
+