我在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下划线'。
我想知道为什么会发生这种情况以及如何显示'宽度下划线'?
答案 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卡查找,显然他们不允许真正的模式匹配。