【发布时间】:2017-10-23 13:02:56
【问题描述】:
我正忙于开发 Symfony 3 应用程序。
我需要知道是否有可能通过 2 条路线进行操作:
- 一个有 1 个参数
- 一个有 2 个参数
在第一种情况下,它将用于创建与给定实体关联的新实体。 在第二种情况下,将编辑一个现有的给定实体,该实体与另一个给定实体相关联。
如果不清楚,这里是我的例子:
/**
* @Route("/admin/instances/{group}/reunions/nouveau", requirements={"group": "\d+"})
* @Route("/admin/instances/{group}/reunions/{reunion}/modifier", requirements={"reunion": "\d+"})
* @Method({"GET", "POST"})
*
* @param Request $request
* @param Group $group
* @param Reunion $reunion
*
* @return Response
*/
public function newEditAction(Request $request, Group $group, Reunion $reunion = null)
{
if (!$reunion) {
// we know we are busy with a creation
}
}
尽管如此,$reunion 永远不会是 null,除非包含实体的表是空的。
因为实体 Group 和 Reunion 都相互关联(参见下面的关系),Symfony 似乎自动搜索与给定 Group 关联的第一个 Reunion 实体。知道为什么吗?
Reunion.php
/**
* @var \AppBundle\Entity\Group
*
* @ORM\ManyToOne(targetEntity="Group", inversedBy="reunions")
* @ORM\JoinColumn(name="reunion_group_id", referencedColumnName="group_id")
*/
private $group;
感谢您的帮助。
【问题讨论】:
-
为什么?这将创建一个过于复杂的动作。您可以轻松地拥有两个动作(每个动作都有自己的路线),在它们的特定任务之后重定向到第三个动作/调用另一个方法,所有公共代码都在其中
-
@kero 取决于您的代码的作用。在 99% 的情况下,我用一种方法创建和更新实体,并且只处理如何或是否应该检索相关实体。我很少需要在单独的方法中分离这些操作。
-
是的,应该不会太复杂。我只需要检查我的对象是否为空,是的,我实例化了一个新对象并将其传递给表单。然后,当表单提交并有效时,我会在持久化之前检查它是否有一个 id。但我也同意有两种方法有时也很有用的事实。但是要回答我的问题,无论我使用什么方法,你知道为什么 Symfony 会通过类型提示做出这样的反应吗?
标签: symfony parameters routes type-hinting symfony-3.2