TYPO3 ExtBase - 未设置必需的参数 X

Bla*_*ack 1 php typo3 typo3-6.2.x

我尝试修改扩展importr以将自定义操作插入到importr\Classes\Controller\ImportrController.php的控制器“Importr”中。

我将操作称为“customAction”,并从一个按钮引用它,我使用importr\Resources\Private\Templates\Importr\Index.html中的流体渲染该按钮<f:link.action>

<div id="myButton">
  <f:link.action 
      extensionName="Importr" 
      pluginName="Importr" 
      controller="Importr" 
      action="custom" 
      arguments="{taskid:5}"
  >
    Click here
  </f:link.action>
</div>
Run Code Online (Sandbox Code Playgroud)

控制器动作:

/**
 * @param int $taskid
 * @return void
 */
public function customAction($taskid)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,每次尝试将参数传递给操作都会失败。在我的第一次尝试中,我什至没有单击按钮就收到错误页面,如下面的屏幕截图所示。


尝试#1

/**
 * @param int $taskid
 * @return void
 */
public function customAction($taskid)
{
    print_r($taskid);
    die;
}
Run Code Online (Sandbox Code Playgroud)

未捕获的 TYPO3 异常

1298012500:未为 HDNET\Importr\Controller\ImportrController->custom 设置必需的参数“taskid”。

TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException 在文件 /var/www/typo3/typo3_src-6.2.25/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php 第 425 行中抛出。

进口商


尝试#2

/**
 * @return void
 */
public function customAction()
{           
    $taskid = "default";

    if ($this->request->hasArgument('taskid')) {
        $taskid = $this->request->getArgument('taskid');
    }

    echo "TASKID = '$taskid'";
    die;
    ...
Run Code Online (Sandbox Code Playgroud)

输出:任务ID =“默认”


尝试#3:

/**
     *  @return void
 */
public function customAction()
{
        $args = $this->request->getArguments();
        $taskid = $args['taskid'];

        echo "TASKID = '$taskid'";
        die;
Run Code Online (Sandbox Code Playgroud)

输出:任务ID = ''

我不知道我还能尝试什么。我是否有可能在流体代码中犯了一个错误?我是否使用了错误的pluginName或extensionName,或者甚至是一个typo3错误?pluginName 存储在哪里以便我可以检查它?



更多信息

我通过将自定义操作添加到内部的其他操作来允许它ext_tables.php

<?php

if (!defined('TYPO3_MODE')) {
    die('Access denied.');
}

/** @var string $_EXTKEY */

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
    'HDNET.' . $_EXTKEY,
    'file',
    'tx_importr_mod',
    '',
[
    'Importr' => 'custom,index,import,preview,create',
],
[
    'access' => 'user,group',
    'icon' => 'EXT:' . $_EXTKEY . '/ext_icon.gif',
    'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xlf'
]);
Run Code Online (Sandbox Code Playgroud)

Bla*_*ack 5

有两个问题:

1.ext_tables.php

操作顺序不正确。第一个操作始终是默认操作,因此它将我的自定义操作作为默认操作,因此单击左侧菜单中的导入模块后没有加载页面。我改正后就成功了。

'Importr' => 'index,import,preview,create,custom',
Run Code Online (Sandbox Code Playgroud)

2. 流体

插件名称不正确,正确的插件名称是file_importrtximportrmod,我们可以在 ext_tables.php 中看到

它甚至不需要,如果您省略pluginName和extensionName,它也可以工作。

请务必随后清除安装工具中的缓存。