微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

传递给 ViewHelper maxRange 的未声明参数

如何解决传递给 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');
        //===
    }

}

我能做什么? 谢谢

解决方法

您正在按照旧的 fashin 方法创建 ViewHelper,使用 renderStatic 而不是 render 方法。关注官方文档here

更多,@Michael 已经解释了 diff。 renderStaticrender 之间!

所以,你需要做的是,

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

请参阅以下您的 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#with-renderstatic

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

,

@GNB mh,不,它不起作用。

我现在检查这个代码: https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html#with-renderstatic

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');
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。