如何在silex中创建带破折号和下划线的路径

时间:2011-11-24 17:13:39

标签: php routing silex

我在php-silex中有一个项目,但我正在使用这个框架。 我创建了一些路线,但有些不起作用。 这里有一些例子:

/*
**INIT HERE & SOME OTHER CODE
*/
 $app->match('letter-{letter}', function($letter) use()
 {
    echo 'With dash';
 });

 $app->match('letter_{letter}', function($letter) use()
 {
    echo 'With underscore';
 });

 $app->match('{other}', function($other) use()
 {
    echo 'Other view';
 });

如果我输入/ letter-a,则输出为'Width dash',但如果输入'/ letter_a',则输出为'Other view'而不是'Width下划线'。

我想知道为什么会发生这种情况以及如何显示'宽度下划线'?

2 个答案:

答案 0 :(得分:3)

问题是路由:letter-{letter}letter_{letter}解析为相同的路由名称,因此第二个路由会覆盖第一个路由名称。解决方案是明确地为路由指定唯一名称。

您可以使用bind

来实现
$app->match('letter-{letter}', function ($letter) {
    echo 'With dash';
})
->bind('letter_dash');

$app->match('letter_{letter}', function ($letter) {
    echo 'With underscore';
})
->bind('letter_underscore');

我会在silex跟踪器上打开一张票,看看当两条同名路由存在时我们是否会出错。 (编辑:done

答案 1 :(得分:0)

我不相信他们允许这种类型的语法,他们在你的斜杠'/'和整个值之间进行whild卡查找,显然他们不允许真正的模式匹配。