我的模型中有以下关系:请求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>
答案 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.像那样