Symfony:具有不同参数的多个路由,默认为空

Posted

技术标签:

【中文标题】Symfony:具有不同参数的多个路由,默认为空【英文标题】:Symfony: multiple routes with different parameters with default null 【发布时间】: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 会通过类型提示做出这样的反应吗? 【参考方案1】:

你应该有两条不同的路线。一个用于创建,只接受 POST 请求,另一个用于编辑,接受 PUT 或 PATCH 请求。

【讨论】:

以上是关于Symfony:具有不同参数的多个路由,默认为空的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2,QueryBuilder,多个和Where具有相同的参数

Symfony 2.0 - 如何使用数组参数创建路由?

带有参数的 symfony 路由上的 css/js 路径错误

为多个设置为 true 的 symfony 选择字段设置默认数据

单个 symfony 路由中的多个模式

如果你在 Symfony 中有 2 条相同的路由怎么办?