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)
有两个问题:
1.ext_tables.php
操作顺序不正确。第一个操作始终是默认操作,因此它将我的自定义操作作为默认操作,因此单击左侧菜单中的导入模块后没有加载页面。我改正后就成功了。
'Importr' => 'index,import,preview,create,custom',
Run Code Online (Sandbox Code Playgroud)
2. 流体
插件名称不正确,正确的插件名称是file_importrtximportrmod,我们可以在 ext_tables.php 中看到
它甚至不需要,如果您省略pluginName和extensionName,它也可以工作。
请务必随后清除安装工具中的缓存。