1

我在 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 underscore'。

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

4

2 回答 2

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 跟踪器上打开一张票,看看我们是否可以在存在两条同名路线时给出错误。(编辑:完成

于 2011-11-26T17:39:28.280 回答
0

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

于 2011-11-26T08:20:40.153 回答