symfony2使用正则表达式为单个Controller Action使用多个url模式

时间:2012-05-03 20:15:47

标签: url routing symfony

使用symfony2可以使用正则表达式为单个Controller Action定义多个url模式,所以我们不必定义几个规则吗? 提前致谢

3 个答案:

答案 0 :(得分:30)

使用注释时,您可以定义多个路线。像那样:

/**
 * @Route ("item1")
 * @Route ("item/2")
 * @Method("GET")
 */
public function itemAction() {

}

我正在使用版本2.0.9

答案 1 :(得分:14)

您的意思是占位符有要求吗?

blog:
    pattern:   /blog/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        page:  \d+

在这里,您有多个由占位符定义的路由,通过正则表达式进行相同的控制器操作验证。

编辑:

网址的每个部分都可以是占位符。

blog:
    pattern:   /{type}/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        type: blog|articles
        page:  \d+

答案 2 :(得分:9)

带参数的路径的注释示例:

/**
 * @Route("/shops/{page}", name="shops")
 * @Route("/shops/town/{town}/{page}", name="shops_town")
 * @Route("/shops/department/{department}/{page}", name="shops_department")
 */
public function shopsAction(Town $town = null, Department $department = null, $page = 1)
{ ... }

然后在这样的树枝中生成路线:

{{ path('shops_town') }}

{{ path('shops_town', {'town': town.id}) }}

{{ path('shops_department', {'department': department.id}) }}