【问题标题】:What if you have 2 identical routes in Symfony?如果你在 Symfony 中有 2 条相同的路由怎么办?
【发布时间】:2021-10-27 17:36:15
【问题描述】:

我正在尝试了解 Symfony 5 路由的工作原理。

如果在我的项目中我有 2 个具有相同路由名称的不同控制器会发生什么?

例如在Controller1.php中:

/**
 * @Route("/publisher/notification_update/")
 */

在Controller2.php中:

 /**
 * @Route("/publisher/notification_update/")
 */

然后从树枝内的某个地方,我有一个表单,如下调用此路由:

<form name="notification" id="notification{{message.notification_id}}"  
        action="/publisher/notification_update/" style="display:none"
        method="post">
        <input hidden class="hiddenNotificationsForUser" type="text" id="{{message.notification_id}}"
            value="{{message.message}}" onclick="this.form.submit();" />
</form>

在这种情况下会发生什么?会出现错误,还是会转到按字母顺序找到的第一条路线?

【问题讨论】:

  • 我想你可以尝试一下,看看会发生什么 ;) 破坏发现的乐趣:你不会得到错误,并且使用第一个匹配项 (Controller1)。
  • 并且路由不按字母顺序匹配,而是按照它们定义的顺序与可选优先级匹配。 bin/console debug:router 将向您显示已定义的路由以及它们匹配的顺序。

标签: symfony routes


【解决方案1】:

在 DigitalOcean 的 LEMP 服务器上使用 Symfony 5 重现此场景后,我发现没有错误或警告消息。

Symfony 选择了 Controller1.php 中指定的路由:

/**
* @Route("/publisher/notification_update/")
*/

然而,这是一件坏事,因为将我描述的情况与大型代码库结合起来可能会导致非常难以识别的错误。 即使所有内容都正确,您也可能永远无法到达您需要的路线。

【讨论】:

  • 路由器允许ordering,因此可以允许多个路由具有该模式。没有检查器来确定特定的路由模式,并且尚未定义属性(这发生在我身上)。这对我来说似乎很合适,并且可能表明域组织的气味不仅仅是编译错误。
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多