路径中参数之间的Symfony2字符

时间:2016-02-08 12:14:05

标签: symfony

所以我有这条路线

path: /view/{category}-{subcategory}

我试图在我的树枝上渲染这条路线

href="{{ path('my_route', {category: cat.slug, subcategory: sub.slug }) }}"

但是symfony给我这个错误

  

在渲染模板期间抛出异常("参数"类别"对于路线" my_route"必须匹配" [^ / - ] + +"("食物便宜"给予)

当我设置真实参数时,是不是自动生成-字符?如果我将-更改为/它可以使用,但我不想使用斜杠,因为它不是category内的URI。

如果我使用此

,它也会起作用

requirements: category: ".*"

但是对于参数使用slu((因为它的重点),会发疯。

例如 category: something subcategory: super-size

URI将为/view/something-super-size,但Symfony2表示

category = something-super

subcategory = size

因为所有内容都有-,并且它不知道在正则表达式模式中停止的位置。

我发现了一种奇怪的行为......

如果我手动输入网址

http://localhost/view/something-super-size

它正确地连接到它的控制器,没有问题,没有使用要求所以可能问题出在{{ path() }}方法......

1 个答案:

答案 0 :(得分:0)

要使您的路线使用短划线作为分段分隔符,请按以下方式声明您的路线:

my_route:
    path: /view/{category}-{subcategory}
    defaults:
        _controller: YourBundle:Controller:method
    requirements:
        category: "[a-zA-Z1-9\-_\/]+"

现在,当使用
时,短划线将自动添加到你的参数之间 href="{{ path('my_route', {category: cat.slug, subcategory: sub.slug }) }}"

修改

更准确地说,使用给定的正则表达式,短划线将被视为uri段分隔符,并且不会成为参数的一部分。
参数完整(不包含-),当您使用path方法生成网址时,-将自动添加到参数之间。正则表达式使其正常工作。

See it in action