Typo3 传递给ViewHelper的未声明参数

Typo3 传递给ViewHelper的未声明参数,typo3,fluid,view-helpers,Typo3,Fluid,View Helpers,我将网站从TYPO3 v7升级到v9,现在出现以下错误: 传递给ViewHelper\ViewHelpers\MyViewHelper的未声明参数:值,列表。有效参数为:[……] 我当前的ViewHelper如下所示: <?php namespace VP\News\ViewHelpers; /** * @package TYPO3 * @subpackage Fluid */ class InListViewHelper extends \TYPO3\CMS\Fluid\Core\

我将网站从TYPO3 v7升级到v9,现在出现以下错误:

传递给ViewHelper\ViewHelpers\MyViewHelper的未声明参数:值,列表。有效参数为:[……]

我当前的ViewHelper如下所示:

<?php

namespace VP\News\ViewHelpers;

/**
* @package TYPO3
* @subpackage Fluid
*/

class InListViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper  {

/**
* @param mixed $value value
* @param mixed $list list
* @return boolean
*/

public function render($value, $list) {
    if (!is_array($list)) {
        $list = str_replace(' ', '', $list);
        $list = explode(',', $list);
    }
    return in_array($value, $list);
}
}

中的v7和v9 ViewHelper之间发生了一些变化

➊ 您应该从抽象类
TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
扩展
➋ 您必须注册传递给ViewHelper的参数。
➌ 您的ViewHelper看起来更像一个条件ViewHelper,而不是一个抽象的ViewHelper

第一点不言自明。只需更改基类的名称(完全限定类名)。对于第二点,您可以使用另一种方法
initializeArguments()
。例如:

public函数initializeArguments():void
{
父::initializeArguments();
$this->registerArgument('value','type','description');
...
}
你可以找到一个例子

但是,您的ViewHelper似乎检查了一个条件(“此元素在列表中吗?”、“然后…”、“其他…”)。因此,最好实现条件ViewHelper

这种类型的ViewHelper扩展了类
TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper
,并使用方法
verdict()
而不是
render()
renderStatic()
来计算条件


您可以找到一个简单条件ViewHelper的示例。

中v7和v9 ViewHelper之间的某些内容已发生更改

➊ 您应该从抽象类
TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
扩展
➋ 您必须注册传递给ViewHelper的参数。
➌ 您的ViewHelper看起来更像一个条件ViewHelper,而不是一个抽象的ViewHelper

第一点不言自明。只需更改基类的名称(完全限定类名)。对于第二点,您可以使用另一种方法
initializeArguments()
。例如:

public函数initializeArguments():void
{
父::initializeArguments();
$this->registerArgument('value','type','description');
...
}
你可以找到一个例子

但是,您的ViewHelper似乎检查了一个条件(“此元素在列表中吗?”、“然后…”、“其他…”)。因此,最好实现条件ViewHelper

这种类型的ViewHelper扩展了类
TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper
,并使用方法
verdict()
而不是
render()
renderStatic()
来计算条件

您可以找到一个简单条件ViewHelper的示例