未声明的参数传递给ViewHelper

问题描述 投票:0回答:1

我将网站从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);
}
}
typo3 fluid view-helpers
1个回答
1
投票

TYPO3 Fluid中的v7和v9 ViewHelpers之间有些更改。

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

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

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

您可以找到示例here

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.