【问题标题】:Using an embedded form in Symfony2在 Symfony2 中使用嵌入式表单
【发布时间】:2012-04-12 09:12:03
【问题描述】:

我在 Symfony2 中嵌入表单时遇到问题。我可能在技术上做错了什么,但也许我犯的错误是在 db-setup 级别上,并且首先不需要嵌入表单。在我展示代码之前,让我们首先关注这一点。

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

V 和 O 也有 formTypes:VType 和 OType。他们有自己的 Twig 模板、路由、控制器操作等。

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

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

但是,很可能是我的 db-setup 不正常,我不应该将 Address 设为单独的实体(和 db 表),但我应该将其设为实体 V 和 O 的一部分。那将也解决了我猜的问题,但这是一种好习惯吗?

提前感谢您的帮助。

【问题讨论】:

  • 让我们从基础开始。请更新您的问题并发布地址、V 和 O 之间的关系(yml 或注释)。这样可以清楚地说明您使用的是哪种关系。

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


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢Петър,您提供的绝对是一篇非常有趣的文章。奇怪的是,在 Symfony2 中建立起来如此复杂,这似乎是任何 db 的常见需求。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多