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 路由上的 css/js 路径错误