【问题标题】:2 Symfony routes with the same pattern, how to?2 具有相同模式的 Symfony 路由,如何?
【发布时间】:2016-04-18 14:47:58
【问题描述】:

我陷入了一个问题,无法摆脱它。

我有 2 个看起来相同但应该路由到不同控制器的 url。

  1. mysite.com/{alias} => 将转到 mysite.com/contact ; mysite.com/about...等 控制器:AppBundle:Default:page.html.twig

  2. mysite.com/{alias} => 将获取我数据库中的商店列表。示例:mysite.com/ebay; mysite.com/apple...等 控制器:AppBundle:Shop:index.html.twig

你会怎么做?

提前致谢

【问题讨论】:

  • 您编写 Controller: AppBundle:Default:page.html.twig 但我看到的是模板而不是动作。此外,您应该对 /contact、/about 等站点使用不同的操作。您想只使用一个是否有特定原因?
  • 是的,我有我的旧路由 /ebay、/amazon...等我必须保留,否则我会失去所有的谷歌排名:) 干杯

标签: symfony url routing


【解决方案1】:

使用相同的模式不是一个好主意,因为 Symfony 会尝试按照您在 routing.yml 中定义的顺序一一匹配您的所有路由。因此,当第一个匹配时,您的第二个模式将始终被忽略。

我建议您更准确地了解您的模式:您应该为静态页面(/contact、/about 等)设置准确的模式,并为每个页面设置一个控制器操作。如果您不想,可以在单个操作上定义多个@Route 注释,或者将requirements 定义为单个@Route 注释。 (如@Route("/{alias}", requirements={"alias"="(contact|about)"}

然后,您可以为商店列表设置一个备用模式/{alias}

编辑: 目的是,而不是让一个正则表达式来匹配您的所有案例,而是拥有几个,但具有您已经拥有的相同行为。

如果您以这种方式定义路由(按此确切顺序):

1. /contact => Contact action
2. /about => About action
3. /{alias} => Shop action (matches every other URL than /contact and /about, like /amazon, /ebay, etc.)

那么这应该可以如你所愿。

如果用户访问 yoursite.com/contact,第一个模式将匹配,因此用户将看到联系人页面。

如果用户访问 yoursite.com/about,第一个模式会失败,但第二个会匹配,因此用户将看到 about 页面。

如果用户访问 yoursite.com/ebay,第一个和第二个模式将失败,但第三个将匹配,因此用户将看到与 "ebay" slug 关联的商店页面。

【讨论】:

  • 干杯。正如我在上面所说的,由于应用程序旧路由,我需要保留这些模式,否则我会失去 50% 的谷歌排名。我想过@Route("/{alias}", requirements={"alias"="(contact|about)"}) 的想法,但是我的应用程序有8种不同的语言,所以要求的llist会是相当大。仅当有更好的方法告诉 requirements={} 为列表查找翻译文件时。你知道这样的事情吗?
  • 据我所知,国际化要求是不可能的。关于你的谷歌排名,我并不是说你应该改变你的 URL 模式,我的意思是你应该改变你的模式在路由中的定义方式。我的解决方案旨在保留您当前的 URL 模式,同时在 Symfony 框架内更好地处理它。不过,我会进行编辑以添加一些说明。
  • 顺便问一下,你们现在如何国际化您的路线?你能给我们贴一些代码(比如路由定义或控制器操作)吗?
  • 看起来不错,但我的问题是国际化。这意味着,按照您的示例,我将有类似的内容:/contact => 联系操作(8 种语言)/about => 联系操作(8 种语言)
  • 这就是为什么我问你现在是如何处理国际化的:) 你用什么来处理不同的语言?在我自己的项目中,我使用 JMSI18nRoutingBundle,这可能对你有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多