TYPO3 ExtBase - 未设置必需的参数 X
TYPO3 ExtBase - Required argument X is not set
我尝试修改扩展 importr 以在 importr\Classes\Controller\ImportrController 处向控制器 "Importr" 插入自定义操作。php.
我调用了动作 "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>
控制器动作:
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
...
}
但是,每次尝试将参数传递给操作都会失败。
在我的第一次尝试中,我什至没有点击按钮就得到了一个错误页面,如下面的屏幕截图所示。
尝试 #1
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
print_r($taskid);
die;
}
Uncaught TYPO3 Exception
1298012500: Required argument "taskid" is not set for HDNET\Importr\Controller\ImportrController->custom.
TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException
thrown in file
/var/www/typo3/typo3_src-6.2.25/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php
in line 425.'
尝试 #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'
尝试 #3:
/**
* @return void
*/
public function customAction()
{
$args = $this->request->getArguments();
$taskid = $args['taskid'];
echo "TASKID = '$taskid'";
die;
OUTPUT: TASKID = ''
我不知道还能尝试什么。有没有可能我在流体代码中犯了错误?我是否使用了错误的 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'
]);
有两个问题:
1. ext_tables.php
操作顺序不正确。
第一个操作始终是默认操作,因此它将我的自定义操作作为默认操作,因此在单击左侧菜单中的 Importr 模块后没有加载任何页面。我修改后就成功了
'Importr' => 'index,import,preview,create,custom',
2。流体
插件名称不正确,正确的插件名称是file_importrtximportrmod
,我们可以在ext_tables.php
中看到
甚至不需要,如果省略 pluginName 和 extensionName 也可以。
确保之后在安装工具中清除缓存。
我尝试修改扩展 importr 以在 importr\Classes\Controller\ImportrController 处向控制器 "Importr" 插入自定义操作。php.
我调用了动作 "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>
控制器动作:
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
...
}
但是,每次尝试将参数传递给操作都会失败。 在我的第一次尝试中,我什至没有点击按钮就得到了一个错误页面,如下面的屏幕截图所示。
尝试 #1
/**
* @param int $taskid
* @return void
*/
public function customAction($taskid)
{
print_r($taskid);
die;
}
Uncaught TYPO3 Exception
1298012500: Required argument "taskid" is not set for HDNET\Importr\Controller\ImportrController->custom.
TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException thrown in file /var/www/typo3/typo3_src-6.2.25/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php in line 425.'
尝试 #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'
尝试 #3:
/**
* @return void
*/
public function customAction()
{
$args = $this->request->getArguments();
$taskid = $args['taskid'];
echo "TASKID = '$taskid'";
die;
OUTPUT: TASKID = ''
我不知道还能尝试什么。有没有可能我在流体代码中犯了错误?我是否使用了错误的 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'
]);
有两个问题:
1. ext_tables.php
操作顺序不正确。 第一个操作始终是默认操作,因此它将我的自定义操作作为默认操作,因此在单击左侧菜单中的 Importr 模块后没有加载任何页面。我修改后就成功了
'Importr' => 'index,import,preview,create,custom',
2。流体
插件名称不正确,正确的插件名称是file_importrtximportrmod
,我们可以在ext_tables.php
甚至不需要,如果省略 pluginName 和 extensionName 也可以。
确保之后在安装工具中清除缓存。