"Undeclared arguments passed to ViewHelper" 异常

"Undeclared arguments passed to ViewHelper" Exception

更新TYPO3后,我得到一个TYPO3Fluid\Fluid\Core\ViewHelper\Exception"Undeclared arguments passed to ViewHelper ... Valid arguments are."

提示:使用 rector 进行这些(和其他)转换! TYPO3 的功能可用,请参阅


这可能是由于扩展使用了已被删除的功能。仅使用 TYPO3 内核,您应该不会看到此错误。

在您的扩展中:如果您仍然在 ViewHelper class 中使用带有参数的 render() 方法,您可能需要替换它:


之前:

public function render(Mail $mail, $type = 'web', $function = 'createAction')

之后:

public function initializeArguments()
{
    parent::initializeArguments();

    $this->registerArgument('mail', Mail::class, 'Mail', true);
    $this->registerArgument('type', 'string', 'type: web | mail', false, 'web');
    $this->registerArgument('function', 'string', 'function: createAction | senderMail | receiverMail', false, 'createAction');
}

public function render()
{
    $mail = $this->arguments['mail'];
    $type = $this->arguments['type'] ?? 'web';
    // ...  

}

此外,

  • 如果不需要使用 render()(例如,除非您需要访问 $this 变量),您可能需要切换到 renderStatic( ) 出于性能原因(另请参阅此 进行说明)
  • 继承自 classes 在 TYPO3Fluid\Fluid\Core\ViewHelper 而不是 TYPO3\CMS\Fluid\Core\ViewHelper:
// use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

文档:

变更日志:

您正在使用其他导致此错误的扩展程序,例如:https://github.com/lochmueller/calendarize/issues/280

如果您在 ViewHelper 中有参数,您可以将它们作为 Fluid Template 的参数发送。在 TYPO3 中,当 render() 函数中没有关于参数的注释时会抛出此错误。你必须包括它们。

示例:

<?php

namespace VENDOR\ExtensionName\ViewHelpers;

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

 /**
  * 
  * @param int $foo
  * @return boolean
  */
 public function render($foo) {
     //function render lines    
     return $bar_boolean;
 }
}