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

问题描述

我将网站从 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);
}
}

标签: typo3fluidview-helpers

解决方案


TYPO3 Fluid中的 v7 和 v9 ViewHelpers 之间发生了一些变化。

➊ 你应该从抽象类扩展TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
➋ 你必须注册你传递给 ViewHelper 的参数。
➌ 你的 ViewHelper 看起来更像Condition-ViewHelper而不是Abstract-ViewHelper

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

public function initializeArguments(): void
{
  parent::initializeArguments();
  $this->registerArgument('value', 'type', 'description');
  ...
}

你可以在这里找到一个例子。

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

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

您可以在此处找到一个简单的Condition-ViewHelper 示例。


推荐阅读