“未声明的参数传递给ViewHelper”异常

时间:2019-07-30 15:07:41

标签: typo3 fluid typo3-9.x view-helpers

更新TYPO3后,我得到一个TYPO3Fluid\Fluid\Core\ViewHelper\Exception“未声明的参数传递给ViewHelper ...有效的参数是。”

2 个答案:

答案 0 :(得分:1)

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

在扩展程序中:如果仍然在ViewHelper类中使用带有参数的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()原因(另请参见此other StackOverflow answer进行澄清)
  • TYPO3Fluid\Fluid\Core\ViewHelper而不是TYPO3\CMS\Fluid\Core\ViewHelper中的类继承:
// use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

文档:

更改日志:

答案 1 :(得分:0)

您使用的其他扩展程序会导致此错误,例如: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;
 }
}