我陷入了一个问题,无法摆脱它。
我有两个看起来相同的网址,但应该路由到不同的控制器。
mysite.com/ {alias} =>将采取mysite.com/contact; mysite.com/about...etc 控制器:AppBundle:默认:page.html.twig
mysite.com/ {alias} =>我将在我的数据库中列出我的商店列表。示例:mysite.com/ebay; mysite.com/apple...etc 控制器:AppBundle:购物:index.html.twig
你会怎么做?
提前致谢
答案 0 :(得分:3)
使用相同的模式不是一个好主意,因为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 ,则第一个模式将失败,但第二个模式将匹配,因此用户将看到关于页面。
如果用户访问 yoursite.com/ebay ,则第一个和第二个模式将失败,但第三个模式将匹配,因此用户将看到与"ebay"
slug关联的商店页面