首页 > 解决方案 > 未声明的参数传递给 ViewHelper maxRange

问题描述

更新 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');
        //===
    }

}

我能做些什么?谢谢

标签: typo3fluidtypo3-9.xview-helperstypo3-10.x

解决方案


您正在遵循旧的方法来创建 ViewHelper 使用renderStatic而不是render方法。在此处关注官方文档。

更多信息,@Michael 解释了差异。renderStatic和之间render

所以,你需要做的是,

  • 将旧方法迁移到新方法(我在上面说过)
  • 您将需要注册参数(参见文档)

请参阅以下 ViewHelper 的 refectored 代码:

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#with-静态渲染

有关更多信息,请查看此处的文档:https ://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html


推荐阅读