Symfony2:Form-Submit上的实体实例化,具体取决于用户选择

时间:2013-07-26 07:23:22

标签: forms symfony database-design

我正在使用Symfony2设置表格,可以编辑货架实体。
书架包含一系列可读实体(例如书籍,杂志等 - 全部继承自Readable) 用户可以添加更多可读实体(表单通过JavaScript扩展),从下拉列表中他可以选择他想要添加的可读类型。根据所选的下拉列表值,将呈现不同的表单字段。到目前为止一切都很好。

现在,当表单提交到服务器时,根据表单中选择的用户的可读类型,应该实例化不同的实体类型。 如果我什么都不做,Symfony只是实例化基类R​​eadable(而不是Book,Magazine等)。

如何根据下拉列表中的选定值告诉Symfony实例化正确的Readable类型?

我尝试使用FormEvent-Listeners,但是:

  • PRE_SUBMIT 中我只得到一个包含$ event-> getData()的“原始”表单数据的数组,即到目前为止尚未实例化实体。但是,在这个阶段,我仍然可以访问下拉列表的值。
  • SUBMIT 中,表单数据已分配给相应的实体。此外,新的Readable已经使用基本Readable-Class进行了实例化。但现在,我无法再访问下拉列表中的值。

这样做的正确方法是什么?

修改
为Shelf FormType添加了最小代码示例:
https://gist.github.com/anonymous/401495b701982adafb96
infinite_form_polycollection代码:
https://gist.github.com/anonymous/b5f0ed10ca9c52177f01

2 个答案:

答案 0 :(得分:0)

您是否尝试过查看this part of the doc?因为“嵌入表格”似乎符合您的需求。

答案 1 :(得分:0)

似乎供应商目录中的PolyCollection的PHP文件有问题,因为在从vendor-dir删除与无限表单捆绑包相关的所有内容并使用composer重新安装后,一切正常。但感谢你的努力YoannCh