我可以在一个Fluid表单中创建多个项目吗?

时间:2017-08-09 16:57:43

标签: typo3 fluid extbase

我的模型中有以下关系:请求1:n Hall(一对多)

在Request模型类中我有

/**
 * hall
 *
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\Hall>
 * @cascade remove
 */
protected $hall = null;

在Hall模型课中我有

/**
 * num
 *
 * @var string
 * @validate NotEmpty
 */
protected $num = '';

我可以在一个流体表格中设置多个项目吗?像

<f:form avction="create" name="hall" object="{hall}" controller="Hall">
<f:form.textfield name="hall[num][]"  class="form-control" />
<f:form.textfield name="hall[num][]"  class="form-control" />   
<f:form.submit value="Create" />
</f:form>

2 个答案:

答案 0 :(得分:2)

您接近解决方案,但您编写的字段name缺少正确的插件名称空间。有一个更简单的解决方案:

<f:form action="create" name="request" object="{request}" controller="Request">
    <f:form.textfield property="hall.0.num" class="form-control"/>
    <f:form.textfield property="hall.1.num" class="form-control"/>
    <f:form.submit value="Create"/>
</f:form>

必须通过适当的表单字段在表单和所有关系中创建根实体(此处为 request )。使用property确保所有字段的正确名称(包括插件命名空间),在这种情况下,例如name="tx_myext_myplugin[request][hall][0][num]"

您可能已经注意到,只要为每个对象使用数字索引,就可以根据需要添加任意数量的关系对象。对于许多字段,您可以使用f:for viewhelper。

答案 1 :(得分:0)

我个人为使用typo3而自动化,所以我会做以下事情:

将以下功能添加到您的模型

public function addHall(Hall $hall){
 $this->hall->atach($hall)
}

pubflic function removeHall(Hall $hall){
 $this->hall->detach($hall)
}

注意:Kepp记住你必须声明$ hall al object storage

现在,您可以在控制器中创建一个新的大厅对象,保留新大厅,使用addHall方法将其添加到所需模型并保持不变。

提示:有很好的小函数fpr持久化;类似于PersistanceManager :: persistAll()或s.th.像那样