如何在Symfony Form中用原型生成的全新元素填充实体类型选择字段?



我有这样的情况:

我有一个主表单(实体"种族"(,其中嵌入了一个集合(实体"种族特征"(。

在这个集合中,有一个名为"替换"的字段,它与他自己的实体("种族特征"(自我引用,具有多对多的关系。 此字段用于确定当前的种族特征是否会取代一个或多个其他种族特征以及哪些种族特征。

在正常行为中一切正常:

  • 添加新特征可以正确触发原型,关系种族 - 种族特征等很好
  • 实体类型已从 Db 正确加载已持久化的实例

我想要实现的是强制填充用户通过原型创建的所有当前 EntityType 字段("添加新的种族特征"(,其中包含他精确插入的新种族特征。

如果用户将为每个"替换字段"(实体类型(添加两个新的种族特征,则为用户添加两个新的种族特征

-性状A(从Db衍生而来(

-性状B(从Db衍生而来(

-新特质(通过"添加新的种族特质"(

-新特质2(通过"添加新的种族特质"(

我已经尝试使用 javascript/jquery 来操纵字段本身,但这在验证中引发了一个错误,因为我不知道如何将我的新值绑定到 EntityType。 我现在想,如果有最佳实践来实现我显然忘记的这样的事情。

目前没有代码可显示,因为问题在于逻辑本身,我担心误用了。

提前感谢您的时间。

我以一种古怪的方式解决了这个问题,只要我找不到更好的解决方案就很好:

场景:

  • 添加新项目集合后,我想用全新添加的项目填充我的实体字段。
  • 最终结果将是这样的:

    [表格

    [[集合 1

    [[[实体字段:集合 1、集合 2、集合 3

    [[集合 2

    [[[实体字段:集合 1、集合 2、集合 3

    [[集合 3

    [[[实体字段:集合 1、集合 2、集合 3

我在这个问题上尝试了不同的方法:

首先,我尝试仅使用FormEvent,修改我的实体字段,并通过Jquery插入到viewData中的选项。 问题是使用PRE_SUBMITSUBMIT,两者都让我只对单个收集项进行操作,以这种方式解决事件:

PRE_SUBMIT集合 1 -> 提交集合 1 -> PRE_SUBMIT 集合 2 -> 提交集合 2 -> PRE_SUBMIT集合 2 -> 提交集合 2 -> PRE_SUBMIT 表格 1 -> 提交表格 1

这意味着我无法从集合 1 事件中读取集合 2 的信息,因为它们尚未设置为正常/模型视图,并且从集合 2/3/或 N 操作的 viceversa 意味着我以前的集合已经提交。

所以最好的解决方案是:

  • 通过仅针对"新操作"的PRE_SET_DATA事件更改未映射的选择字段中的实体字段
  • 将用户创建的可能选项的列表(数组(设置为未映射的隐藏字段,填充方式与我对全新的未映射选择字段的填充方式相同
  • 进入PRE_SUBMIT,使用隐藏字段的内容更新我未填充的选择字段的选项。
  • 然后,从控制器中,使用该未映射的选择字段来设置我的自引用关系。

嗯,它有效。希望这可以帮助有同样需求的其他人。 显然,如果有人有更好的建议,我就听不见了!

最新更新