Symfony路由以区分歧义路径

时间:2019-05-07 06:06:19

标签: php symfony routing symfony-3.4 symfony-routing

我对Symfony路由有问题。即使我在两个不同路由的路径中使用不同的参数,Symfony仍将其识别为一个模式并定向到在路由文件中首先定义的路径。 例如:

app_restaurants_inner:
    path:     /london-restaurants/{id}/{restaurant_name}.html
    defaults: { _controller: AppBundle:Restaurants:inner}

app_restaurants_by_cuisine:
    path:     /london-restaurants/cuisine/{cuisine}.html
    defaults: { _controller: AppBundle:Restaurants:index}

第一条路线会加载特定的餐厅,其参数为ID和餐厅名称。餐厅名称仅包含a-z,0-9和连字符。 在第二个参数中,只有一个参数是美食。但是,当我尝试加载美食(第二条路线)时,它会将我定向到餐厅路线,该路线与美食路线相似。

另一方面,还确定了以下路线,类似于餐厅的路径。

app_restaurants_by_cuisine_letter:
    path:     /london-restaurants/cuisine/{cuisine}-{letter}.html
    defaults: { _controller: AppBundle:Restaurants:index}

“美食”一词被标识为“ {id}”,“ {cuisine}-{letter}”被标识为“ {restaurant_name}”。

我该如何解决?

1 个答案:

答案 0 :(得分:3)

您应该在路线定义Adding {wildcard} Requirements

中添加一些要求
app_restaurants_inner:
    path:     /london-restaurants/{id}/{restaurant_name}.html
    defaults: { _controller: AppBundle:Restaurants:inner}
    requirements:
        id: '\d+'

app_restaurants_by_cuisine:
    path:     /london-restaurants/cuisine/{cuisine}.html
    defaults: { _controller: AppBundle:Restaurants:index}