在Symfony2中使用嵌入的表单

时间:2012-04-12 09:12:04

标签: forms database-design symfony doctrine-orm embedding

我在Symfony2中嵌入表单时遇到问题。我可能在技术上做错了,但也许我所犯的错误是在db-setup的层面上,并且首先嵌入表单是不必要的。在我提出代码之前,让我们首先关注它。

我制作了两个实体:V和O.它们都代表位置,但是指的是不同类型的位置。通过ref-id,它们每个都引用一个实体地址。多个V可以指代相同的地址,多个O可以指代相同的地址,并且在同一地址上甚至可以存在V和O.显示V,O,O和地址(控制器和路由工作)。创建或编辑地址也很好;我已经制作了一个名为AddressType的表单类型,这样也可以正常工作。

V和O也有formTypes:VType和OType。他们有Twig模板,路线,控制器动作等。

现在我希望用户能够在表单中输入新的V,其中还有可用于输入新地址的字段。因此,我不希望用户从某种列表中选择一个已存在的地址(但是我已经开始工作了),但我希望他们能够添加新地址。该地址是否已存在于db表"地址" (这很可能),Symfony2应该引用现有的地址,而不是再次创建相同的地址。

现在我的问题是,我没有成功地呈现嵌入在V或O表单中的地址表单(AddressType)。基本上我希望AddressType表单呈现为V或O表单的一部分。这可能吗?

然而,很可能我的db-setup不合适,我不应该将Address作为一个单独的实体(和db表),但我应该把它作为实体V和O的一部分。那就是我猜也解决了这个问题,但这是好的做法吗?

我提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我有类似的问题。这是一种复杂的形式,可能不那么容易完成。 最好的方法是创建自定义表单类型或甚至是原始表单(我更喜欢),并编写控制器操作,直接使用Request类处理此表单。然后,您可以使用ConstraintCollections验证输入,并使用您的类和Doctrine的EntityManager直接编写实体。

这个链接可能会有用 - 或者至少帮助我验证非对象: http://www.ricardclau.com/2011/11/how-to-use-symfony2-validator-component-without-forms-entities-and-data-arrays/

所以基本上你必须在这里编写代码。