2011-11-24 102 views
1

我已经在php-silex中有了一个项目,但我正在使用这个框架。 我创建了一些路线,但有些不起作用。 这里是一些为例:如何使用虚线和下划线在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”输出“其它视图”而不是“宽下划线”。

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

回答

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'); 

我会在硅石跟踪开出罚单,看是否存在时,两条路线具有相同的名称,我们可以给出一个错误。 (编辑:done

0

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

+0

非常整洁的框架,你刚才介绍我:) – krob