我尝试修改扩展名importr以在 importr\Classes\Controller\ImportrController.php 处向控制器"Importr"插入自定义操作 .
我通过使用 <f:link.action>
从 importr\Resources\Private\Templates\Importr\Index.html 中使用流体渲染的按钮调用了动作"customAction"并引用了它
<div id="myButton">
<f:link.action
extensionName="Importr"
pluginName="Importr"
controller="Importr"
action="custom"
arguments="{taskid:5}"
>
Click here
</f:link.action>
</div>
controller action:
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
...
}
但是,每次尝试将参数传递给操作都会失败 . 在我第一次尝试时,我甚至没有点击按钮就会出现错误页面,如下面的屏幕截图所示 .
Attempt #1
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
print_r($taskid);
die;
}
未捕获TYPO3异常1298012500:未为HDNET \ Importr \ Controller \ ImportrController-> custom设置必需参数“taskid” . 在第425行的文件/var/www/typo3/typo3_src-6.2.25/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php中抛出TYPO3 \ CMS \ Extbase \ Mvc \ Controller \ Exception \ RequiredArgumentMissingException .
Attempt #2
/**
* @return void
*/
public function customAction()
{
$taskid = "default";
if ($this->request->hasArgument('taskid')) {
$taskid = $this->request->getArgument('taskid');
}
echo "TASKID = '$taskid'";
die;
...
OUTPUT:TASKID ='default'
Attempt #3:
/**
* @return void
*/
public function customAction()
{
$args = $this->request->getArguments();
$taskid = $args['taskid'];
echo "TASKID = '$taskid'";
die;
输出:TASKID =''
我不知道还能尝试什么 . 我有可能在流体代码中犯了错误吗?我使用错误的pluginName或extensionName还是甚至是一个错误的bug? pluginName存储在哪里,所以我可以查看它?
More Infos
我通过将其添加到 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'
]);
1 回答
有两个问题:
1. ext_tables.php
行动的顺序不正确 . 第一个操作始终是默认操作,因此我将自定义操作作为默认操作,因此在单击左侧菜单中的Importr模块后没有加载任何页面 . 我纠正后它起作用了 .
2. Fluid
pluginName不正确,正确的pluginName是
file_importrtximportrmod
,我们可以在ext_tables.php中看到它甚至不需要,如果你省略pluginName和extensionName也可以 .
确保之后清除安装工具中的缓存 .