0

我正在使用 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

4

2 回答 2

0

您是否尝试过查看文档的这一部分?由于“嵌入表单”似乎符合您的需求。

于 2013-07-26T12:05:53.497 回答
0

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

于 2013-08-16T12:09:57.720 回答