【发布时间】:2015-04-13 09:17:49
【问题描述】:
我已经在 Symfony 上玩了大约一个月了。到目前为止,我喜欢这个框架,但我遇到了一个让我对 Form 组件产生怀疑的问题。
概述 我有两种形式,每种形式用于以下实体:
- 帖子
- 标签
它们具有多对多的双向关系。标签表单嵌入在帖子表单中,以允许动态创建新标签并将其与帖子相关联。
问题 当使用新的标签条目时,这在启用级联的情况下工作得很好。但是,如果重新使用现有标签条目,则标签实体会触发唯一约束违规。嵌入式表单基本上作为一个实用程序仅用于创建新标签,因为我想在现有标签未插入但仅与父表单相关联的条件场景中使用它。
为了避免重复问题,我关闭了级联并与教义听众一起玩。但是,我找不到解决方法。有没有人有任何想法?我显然可以手动处理表单提交,但这会半途而废。
表单类型
- 两种形式都扩展了“AbstractType”
控制器
-
处理代码的特定操作看起来像这样
$em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('B4PGround0Bundle:Blog\\Blog')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Blog entity.'); } $deleteForm = $this->createDeleteForm($id); $editForm = $this->createEditForm($entity); $editForm->handleRequest($request); if ($editForm->isValid()) { $em->flush();
实体
-
Blog类的摘录(Blog与前面提到的Posts相同)
/** * @ORM\ManyToMany(targetEntity="Tag", inversedBy="blogs") * @ORM\JoinTable(name="tags_blogs") * @Assert\Valid() **/ private $tags; ....... public function addTag($tag) { $tags->addBlog($this); $this->tags[] = $tags; return $this } -
标签类的摘录
/** * @ORM\ManyToMany(targetEntity="Blog", mappedBy="tags") **/ private $blogs; .... public function addBlog($blog) { $this->blogs[] = $blogs; return $this; }`
【问题讨论】:
-
您可以发布您的表单类型吗?如果没有一些代码,它有点难以帮助你。通常这应该工作得很好,SF2 应该只编辑关系表。
-
好的,让我快速编辑帖子。
-
全部完成。我只花了大约 20 分钟,因为我不知何故也设法打破了这里的表格,迫使我手动写下代码以进行适当的缩进。就是这样的一天。
标签: php forms symfony doctrine-orm