Typo3(6.2.4)Extbase / Fluid / Error Handling:相关对象的奇怪索引

时间:2018-03-23 08:06:15

标签: php typo3 fluid extbase typo3-6.2.x

我有一个“Laeufer”对象可以有“Sponsoren”(1:n)。对于“Sponsoren”,我有不同的必需输入字段,如

<input class="form-control sponsorBetrag" name="tx_lhsponsorenlauf_p1registrierung[laeufer][sponsoren][0][betrag]" type="text">

但是当我提交表单时,属性路径看起来像 sponsoren.00000000497382d100007fe050b66fc0.betrag 而不是 sponsoren.0.betrag ,这是我所期待的。该字段也没有得到错误类“myerror”。有什么想法吗?

FLUID

<f:form.textfield errorClass="myerror" property="sponsoren.0.betrag" class="form-control sponsorBetrag" />

1 个答案:

答案 0 :(得分:0)

您最有可能使用\TYPO3\CMS\Extbase\Persistence\ObjectStorage作为您的财产。这类似于\SplObjectStorage,并且不对内部存储数组使用数字索引,而是对要存储的对象进行哈希处理,并使用此哈希对象作为索引。但是,您可以解决此问题,并在控制器中使用$this->view->assign('sponsoren', $sponsoren->toArray());为视图分配一个真实数组,而不是ObjectStorage。

其次,您的字段未获取错误类,因为您不使用ViewHelper。因此,Fluid根本不关心您的输入。我建议您在模板中使用<f:form.textfield property="betrag" />而不是自写输入。

编辑:

据我所知,TYPO3 6.2无法使用OjectStorages子属性作为不同的字段,而不是选择字段。 但是,如果您需要为ObjectStorage的不同元素提供表单字段,那么您的域模型体系结构可能是错误的。如果您有一个特定的赞助商对象,您应该为此选项使用不同的属性,而不是将其放在赞助商列表中。

如果您想拥有单个赞助商的编辑表单,请按照这样做

<f:for each="{sponsors}" as="sponsor">
    <f:form action="update" controller="Sponsor" object="{sponsor}" name="sponsor">
        <f:form.textfield property="betrag" errorClass="myerror" class="form-control sponsorBetrag" />
    ...
        <f:form.submit value="Update sponsor" />
    </f:form>
</f:for>

并创建一个可以更新单个赞助商的控制器。