typo3 - 未声明的参数传递给 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);
}
}
解决方案
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 示例。
推荐阅读
- java - 将 .class 作为参数传递给方法 (JAVA) (BUKKIT/SPIGOT) (CUSTOM EVENT SYSTEM)
- jqxgrid - jqwidgets jqxGrid 转到特定行的页面
- javascript - 如何根据给定值在Javascript中分配动态范围值?
- java - Session.getAsyncRemote().sendText("") 是否保证消息的顺序/连续性?
- graphql - 放大 GraphQL 将嵌套输入添加到连接
- json - 无法绑定来自可观察 IONIC 的值
- python - 如何从事件函数返回值并将其设置为 LineEdit?
- javascript - Next.js:错误:React.Children.only 预期接收单个 React 元素子项
- python - 我们如何为特定的 python 程序编写键盘按键?
- go - 当我想返回文件类型时出错 Go Function