TYPO3 f:form 带有附加参数,其中提交不更新参数
TYPO3 f:form with additional arguments, where submit not update the arguments
我正在使用 TYPO3 10.4.15
我的编辑视图:
f:section name="content">
<h1>Edit Album</h1>
<f:flashMessages />
<f:render partial="FormErrors" />
<f:form id='fNew' action="update" name="album" object="{album}" arguments="{mode:mode, disc:disc}" >
<f:render partial="Album/FormFields" arguments="{album:album, disc:disc}" />
<f:form.submit value="Save" />
</f:form>
</f:section>
</html>
这是部分formfields.html的相关部分:
<f:if condition='{disc}'>
<input type='text' name="disc[0][name][]" />
</f:if>
圆盘结构的error_log
看起来:
Update-Disc: array (
0 =>
array (
'name' => '',
'trackNum' => '1',
'track' =>
array (
0 =>
array (
'title' => '',
'duration' => '0',
'composer' => '',
'texter' => '',
'musicFile' => '',
'imageFile' => '',
),
),
),
)
这是控制器的“updateAction”部分
/**
* action update
*
* @param \HGA\Album\Domain\Model\Album $album
* @param string $mode
* @param array $disc
* @return string|object|null|void
*/
public function updateAction(\HGA\Album\Domain\Model\Album $album, $mode, $disc)
{
error_log("Update-Disc: " . var_export($disc, true) . " Mode: " . $mode, 0);
if ($mode == 'tracks') {
$this->editAction($album, $mode, $disc);
}
error_log("Update: " . var_export($album, true) . " Mode: " . $mode, 0);
$this->addFlashMessage('The object was updated. Please be aware that this action is publicly accessible unless you implement an access check. See https://docs.typo3.org/typo3cms/extensions/extension_builder/User/Index.html', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING);
$this->albumRepository->update($album);
$this->redirect('list');
}
如果我在文本输入字段中写入内容并执行提交,我会得到如上所示的 error_log
。我在输入字段中输入的值丢失了。它只是数组,因为我已将它发送到视图。
模式字符串会正确传输,但磁盘阵列可能有问题!
圆盘阵列比较复杂,但我把它简化了,因为我需要了解它的一般工作原理。
我也需要这个额外的光盘阵列,但不能用专辑对象来做!
在此先感谢您的帮助。
您忽略了您的插件的命名空间以及对 f:form
arguments
.
的误解
插件的每个字段都有一个前缀,如 tx_hgaalbum...
,后跟方括号中的 属性 名称。所以 disc 的字段名应该类似于 tx_hgaalbum...[disc]
。查看 HTML 代码并查看为其他属性生成了哪些名称。
第二个问题是在form-ViewHelper中使用arguments
。这只会将参数添加到表单的操作 URI。这就是为什么您要获得 disc 的初始值。
我正在使用 TYPO3 10.4.15 我的编辑视图:
f:section name="content">
<h1>Edit Album</h1>
<f:flashMessages />
<f:render partial="FormErrors" />
<f:form id='fNew' action="update" name="album" object="{album}" arguments="{mode:mode, disc:disc}" >
<f:render partial="Album/FormFields" arguments="{album:album, disc:disc}" />
<f:form.submit value="Save" />
</f:form>
</f:section>
</html>
这是部分formfields.html的相关部分:
<f:if condition='{disc}'>
<input type='text' name="disc[0][name][]" />
</f:if>
圆盘结构的error_log
看起来:
Update-Disc: array (
0 =>
array (
'name' => '',
'trackNum' => '1',
'track' =>
array (
0 =>
array (
'title' => '',
'duration' => '0',
'composer' => '',
'texter' => '',
'musicFile' => '',
'imageFile' => '',
),
),
),
)
这是控制器的“updateAction”部分
/**
* action update
*
* @param \HGA\Album\Domain\Model\Album $album
* @param string $mode
* @param array $disc
* @return string|object|null|void
*/
public function updateAction(\HGA\Album\Domain\Model\Album $album, $mode, $disc)
{
error_log("Update-Disc: " . var_export($disc, true) . " Mode: " . $mode, 0);
if ($mode == 'tracks') {
$this->editAction($album, $mode, $disc);
}
error_log("Update: " . var_export($album, true) . " Mode: " . $mode, 0);
$this->addFlashMessage('The object was updated. Please be aware that this action is publicly accessible unless you implement an access check. See https://docs.typo3.org/typo3cms/extensions/extension_builder/User/Index.html', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING);
$this->albumRepository->update($album);
$this->redirect('list');
}
如果我在文本输入字段中写入内容并执行提交,我会得到如上所示的 error_log
。我在输入字段中输入的值丢失了。它只是数组,因为我已将它发送到视图。
模式字符串会正确传输,但磁盘阵列可能有问题!
圆盘阵列比较复杂,但我把它简化了,因为我需要了解它的一般工作原理。 我也需要这个额外的光盘阵列,但不能用专辑对象来做!
在此先感谢您的帮助。
您忽略了您的插件的命名空间以及对 f:form
arguments
.
插件的每个字段都有一个前缀,如 tx_hgaalbum...
,后跟方括号中的 属性 名称。所以 disc 的字段名应该类似于 tx_hgaalbum...[disc]
。查看 HTML 代码并查看为其他属性生成了哪些名称。
第二个问题是在form-ViewHelper中使用arguments
。这只会将参数添加到表单的操作 URI。这就是为什么您要获得 disc 的初始值。