我正在使用 Symfony2 设置一个表单,可以在其中编辑一个货架实体。
一个书架包含一组可读实体(例如,书籍、杂志等 - 都继承自 Readable)。
用户可以添加更多 Readable-Entities(表单通过 JavaScript 扩展),并且可以从下拉列表中选择他想要添加的 Readable 类型。根据所选的下拉值,呈现不同的表单字段。到目前为止,一切都很好。
现在,当表单提交到服务器时,根据用户在表单中选择的 Readable-Type,应该实例化不同的实体类型。如果我什么都不做,Symfony 只会实例化基类 Readable(而不是 Book、Magazine 等)。
我如何告诉 Symfony 根据下拉列表中选择的值实例化正确类型的 Readable?
我尝试使用 FormEvent-Listeners,但是:
- 在PRE_SUBMIT中,我只使用 $event->getData() 得到一个包含“原始”表单数据的数组,即到目前为止还没有实体被实例化。但是,在这个阶段,我仍然可以访问下拉列表的值。
- 在SUBMIT中,表单数据已分配给适当的实体。此外,新的 Readable 已经使用基本的 Readable-Class 实例化。但是现在,我无法再访问下拉列表中的值。
这样做的正确方法是什么?
编辑
为 Shelf FormType 添加了一个最小的代码示例:
https
://gist.github.com/anonymous/401495b701982adafb96
无限格式的代码:
https ://gist.github.com/anonymous/b5f0ed10ca9c52177f01