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

sva*_*ssr 14 url routing symfony

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

小智 32

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

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

}
Run Code Online (Sandbox Code Playgroud)

我正在使用2.0.9版

  • 由于您可能已打开app/console,请不要忘记router:debug命令以查看所有路由.如果您使用注释,默认情况下您将获得路线的合理名称,因此实际上很容易找到控制器. (7认同)
  • 这真的很有趣,我喜欢有只是一个_Action_之前定义的相关路线的想法,但我宁愿保持在只有一个_routing.yml_的一切,而不是在我所有的控制器传播我的路由规则 (2认同)

ila*_*nco 15

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

blog:
    pattern:   /blog/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        page:  \d+
Run Code Online (Sandbox Code Playgroud)

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

编辑:

url的每个部分都可以是占位符.

blog:
    pattern:   /{type}/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        type: blog|articles
        page:  \d+
Run Code Online (Sandbox Code Playgroud)


Jea*_*rat 10

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

/**
 * @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)
{ ... }
Run Code Online (Sandbox Code Playgroud)

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

{{ path('shops_town') }}
Run Code Online (Sandbox Code Playgroud)

要么

{{ path('shops_town', {'town': town.id}) }}
Run Code Online (Sandbox Code Playgroud)

要么

{{ path('shops_department', {'department': department.id}) }}
Run Code Online (Sandbox Code Playgroud)

  • 您好,您确定生成网址的第一个语句是否应该是 path('shops') 而不是 path('shops_town') ? (2认同)