TYPO3 f:带有附加参数的表单,其中提交不更新参数

TYPO3 f:带有附加参数的表单,其中提交不更新参数,typo3,fluid,Typo3,Fluid,我使用的是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="al

我使用的是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>
这是控制器的“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');
}
如果我在文本输入字段中写入一些内容并执行submit,就会得到上面所示的
错误日志。我在输入字段中键入的值丢失。它只是数组,因为我已经将它发送到视图。
模式字符串将正确传输,但光盘阵列可能有问题

光盘阵列更复杂,但我把它简化了,因为我需要了解它的工作原理。 我还需要这个额外的光盘阵列,但无法使用相册对象


提前感谢您的帮助。

您忽略了插件的名称空间以及对
f:form
参数的错误解释

插件的每个字段都有一个前缀,如
tx\u hgaalbum…
,后跟方括号中的属性名称。因此,光盘的字段名应该类似于
tx\u hgaalbum…[disc]
。查看HTML代码,看看为其他属性生成了哪些名称


第二个问题是在表单ViewHelper中使用
参数。这只会将参数添加到表单的操作URI中。这就是为什么要获取光盘的初始值。

我假设f:form有几个bug。另请参阅我的f:form问题:@whowknows,请在抱怨其他人的糟糕编码之前尝试理解代码;)
 Update-Disc: array (
  0 => 
  array (
    'name' => '',
    'trackNum' => '1',
    'track' => 
    array (
      0 => 
          array (
            'title' => '',
            'duration' => '0',
            'composer' => '',
            'texter' => '',
            'musicFile' => '',
            'imageFile' => '',
          ),
        ),
      ),
    ) 
/**
 * 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');
}