Symfony 路由中的可选前缀部分

Symfony 路由中的可选前缀部分,symfony,Symfony,我试图创建一个相当复杂的路由模式,但我被卡住了 我不想匹配的路线 /books indexAction /books/show showAction /books/authorname indexAction /books/authorname/show showAction 当前设置 Routing.yml actions: resource: routing/actions.yml prefix: /books

我试图创建一个相当复杂的路由模式,但我被卡住了

我不想匹配的路线

/books                  indexAction
/books/show             showAction
/books/authorname       indexAction
/books/authorname/show  showAction
当前设置

Routing.yml

actions:
  resource: routing/actions.yml
  prefix: /books/{authorname}
  requirements:
      authorname: ".*"
  defaults:
      authorname: ''
books_index:
    path:   ""
    defaults: { _controller:bookController:indexAction }

books_show:
    path:   "/show"
    defaults: { _controller:bookController:showAction }
路由/操作.yml

actions:
  resource: routing/actions.yml
  prefix: /books/{authorname}
  requirements:
      authorname: ".*"
  defaults:
      authorname: ''
books_index:
    path:   ""
    defaults: { _controller:bookController:indexAction }

books_show:
    path:   "/show"
    defaults: { _controller:bookController:showAction }
此设置当前仅匹配:

/books/                  indexAction
/books/show             showAction
/books/authorname       indexAction
/books/authorname/show  showAction
但不是

/books
我之所以将这些路由拆分为两个文件,是因为实际上这些操作包含更多路由,而且还有其他路由类别,而不是操作


我知道我可以在没有前缀的情况下手动定义/books路由,但我希望避免这种情况,因为此模式将用于许多不同的模块。

在任何情况下,您都需要
/book
前缀

一种解决方案是在
routing.yml
中为此定义单独的条目。一个带有
/books
前缀,第二个带有
/books/{authorname}

index:
  resource: routing/actions.yml
  prefix: /books

show:
  resource: routing/actions.yml
  prefix: /books/{authorname}
它不是那么优雅,但在这种情况下,您可以去掉额外的
要求
部分


希望这有帮助

谢谢你,你做得很好。