storing the render function in ViewHelperVariableContainer
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
This commit is contained in:
parent
9f3488f84e
commit
050e6e119f
6 changed files with 42 additions and 6 deletions
|
@ -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'];
|
||||
|
|
|
@ -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 '';
|
||||
}
|
||||
}
|
||||
|
|
26
Classes/ViewHelpers/Traits/ValidateRenderFunctionTrait.php
Normal file
26
Classes/ViewHelpers/Traits/ValidateRenderFunctionTrait.php
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DigiComp\FluidRenderFunctions\ViewHelpers\Traits;
|
||||
|
||||
use DigiComp\FluidRenderFunctions\InvokeRenderFunctionInterface;
|
||||
use DigiComp\FluidRenderFunctions\ViewHelpers\RegisterRenderFunctionViewHelper;
|
||||
|
||||
trait ValidateRenderFunctionTrait
|
||||
{
|
||||
public function validateRenderFunctionArgument(string $argumentName)
|
||||
{
|
||||
$renderFunction = $this->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;
|
||||
}
|
||||
}
|
|
@ -13,5 +13,5 @@ FluidRenderFunctions to the rescue:
|
|||
<rf:registerRenderFunction as="renderBook" subjectName="myBook">
|
||||
{myBook.name} from {myBook.author.name}
|
||||
</rf:registerRenderFunction>
|
||||
<f:form.select options="{books -> rf:applyRenderFunction(function: renderBook)}" />
|
||||
<f:form.select options="{books -> rf:applyRenderFunction(function: 'renderBook')}" />
|
||||
```
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
<rf:registerRenderFunction as="testFunc">
|
||||
{subject.name} is cool
|
||||
</rf:registerRenderFunction>
|
||||
{test -> rf:applyRenderFunction(function: testFunc, force: true)}
|
||||
{test -> rf:applyRenderFunction(function: 'testFunc', force: true)}
|
||||
</f:spaceless></f:section>
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
<rf:registerRenderFunction as="testFunc">
|
||||
{subject.name} is cool
|
||||
</rf:registerRenderFunction>
|
||||
<f:form.select options="{testEntities -> rf:applyRenderFunction(function: testFunc)}" />
|
||||
<f:form.select options="{testEntities -> rf:applyRenderFunction(function: 'testFunc')}" />
|
||||
</f:spaceless></f:section>
|
||||
|
|
Loading…
Reference in a new issue