2012-04-12 122 views
0

我在Symfony2中嵌入窗体时遇到问题。我可能会做一些技术上的错误,但也许我犯的错误是在数据库设置的层面上,并且首先嵌入表单并不是必要的。在提交代码之前,我们先关注一下。在Symfony2中使用嵌入式窗体

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

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

现在我希望用户能够在窗体中输入新的V,其中也有可用于输入新地址的字段。所以我不希望用户从某种列表中选择一个已经存在的地址(但是我得到了这个工作),但我希望他们能够添加一个新地址。如果地址已经存在于数据库表“地址”中(这很可能),Symfony2应该引用该地址,而不是再次创建相同的地址。

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

但是,它很可能是我的db-setup不好,我不应该使Address成为一个单独的实体(和db表),但我应该将它作为实体V和O的一部分。我也会解决这个问题,但这是否是一个好习惯?

我很感谢你的帮助。

+0

让我们从基础开始。请更新您的问题,并发布Address,V和O之间的关系(yml或注释)。这将明确说明您正在使用哪种关系。 – Cerad 2012-04-12 13:40:44

回答

0

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

此链接可能会得到有用的 - 或者至少帮了我很多关于非对象的验证: http://www.ricardclau.com/2011/11/how-to-use-symfony2-validator-component-without-forms-entities-and-data-arrays/

所以基本上你将不得不在这里写代码。

+0

非常感谢您Петър,绝对是您提供的一篇非常有趣的文章。奇怪的是,在Symfony2中这样做太复杂了,看起来对于任何db来说都是非常普遍的需求。谢谢您的回答。 – 2012-05-19 13:10:12

相关问题