路由正则表达式要求:排除特定单词

时间:2013-10-09 16:35:17

标签: regex symfony routing

我正在使用Symfony 2.3.5创建一个应用程序来管理我的音乐。 我在配置路线方面遇到了一些问题。

我想创建3条路线:

  • 显示艺术家:/music/mickael_jackson
  • 编辑艺术家:/music/mickael_jackson/edit
  • 显示相册:/music/mickael_jackson/thriller

正如您所显示的,“编辑艺术家”和“显示专辑”的路线之间会发生冲突:“编辑艺术家”被视为“显示专辑路线”并给我找不到404。

我正在尝试使用正则表达式从路线“显示专辑”中排除关键字editdelete

我在这里找到了一个:A regular expression to exclude a word/string(接受了一些改动的答案),但它不起作用,我有一个错误,因为我的路线'显示专辑'与正则表达式不匹配。

例外:

An exception has been thrown during the rendering of a template ("Parameter "nameCanonical" for route "corum_music_album_show" must match "/(?!edit|delete)" ("beneath_the_encasing_of_ashes" given) to generate a corresponding URL.") in CorumMusicBundle:Artist:show.html.twig at line 36. 

我的路线:

* @Route(
*         "{artistNameCanonical}/{nameCanonical}",
*         name = "corum_music_album_show",
*         requirements={"nameCanonical" = "^/(?!edit|delete)$"},
*         options = {"expose"=true}
* )

我找不到配置中的错误。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

使用此模式^(?!.*(edit|delete)$).* 我也不知道交响乐

答案 1 :(得分:0)

删除正斜杠,

*         requirements={"nameCanonical" = "^(?!edit|delete)$"},

因为它已经包含在您的总路径中。

否则,正则表达式对我来说没问题;干得好,自己找答案。大多数刚接触正则表达式的人都无法应用外观断言。

答案 2 :(得分:0)

在“显示专辑”路线前移动“编辑艺术家”路线。 当然,您将无法使用“编辑”作为专辑的名称,但我想您可以使用它。