【问题标题】:Symfony: multiple routes with different parameters with default nullSymfony:具有不同参数的多个路由,默认为空
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 2020-11-26
    • 2012-09-12
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多