问题描述
更新 TYPO3 后,我得到一个 TYPO3Fluid\Fluid\Core\ViewHelper\Exception “未声明的参数传递给 ViewHelper ... maxrange 有效参数是。”
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
/**
* divides the maxrange with two
* (A rating of 10 results in 5 Starts e.g.)
*
* @param integer $maxrange
* @return boolean
*/
public function render($maxrange)
{
return array_fill(0,($maxrange / 2),'iter');
//===
}
}
我能做什么? 谢谢
解决方法
您正在按照旧的 fashin 方法创建 ViewHelper,使用 renderStatic
而不是 render
方法。关注官方文档here。
更多,@Michael 已经解释了 diff。 renderStatic
和 render
之间!
所以,你需要做的是,
- 将旧方法迁移到新方法(我在上面说过)
- 您需要注册参数(请参阅文档)
请参阅以下您的 ViewHelper 的反射代码:
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
use CompileWithContentArgumentAndRenderStatic;
public function initializeArguments() {
$this->registerArgument('maxRange','string','divides the maxRange with two',false,null);
}
public static function renderStatic(
array $maxRange,\Closure $renderChildrenClosure,RenderingContextInterface $renderingContext
) {
$maxRange = $renderChildrenClosure();
// Debug to get argument
var_dump($maxRange);
// return array_fill(0,($maxRange / 2),'iter');
//===
}
}
有关更多信息,请查看此处的文档:https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html
,@GNB mh,不,它不起作用。
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderStatic;
public function initializeArguments() {
$this->registerArgument('maxRange',null);
}
public static function renderStatic(
array $maxRange,RenderingContextInterface $renderingContext
) {
$maxRange = $renderChildrenClosure();
}
}
致命错误:在第 30 行的 .../Classes/ViewHelpers/NumberOfStarsViewHelper.php 中未找到特性“...\ViewHelpers\CompileWithContentArgumentAndRenderStatic”
第 30 行:
class NumberOfStarsViewHelper extends AbstractViewHelper
,
解决办法:
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
public function initializeArguments() {
parent::initializeArguments();
$this->registerArgument('maxRange',null);
}
use CompileWithRenderStatic;
public static function renderStatic(
array $arguments,RenderingContextInterface $renderingContext
) {
return array_fill(0,($arguments["maxRange"] / 2),'iter');
}
}