Silex路由(复数)

时间:2013-09-15 15:19:25

标签: php symfony url-routing silex

如果我有像:

这样的沉默路线
$app->get('/project/{projectName}', function (Request $request, $projectName) use ($app) {
   return $projectName;
})
->value('projectName', 'all')
->bind('project');

为什么我不能定义另一条路线,如:

$app->get('/projects', ...)
->bind('projects');

每当我尝试访问/projects路由时,我都会被重定向到/projects/并显示错误消息(NotFoundHttpException: No route found for "GET /projects/")。

引擎盖下是否有一些复数逻辑阻止了这个或其他什么可能干扰? (当将第二条路线重命名为其他任何东西时,它工作得很好,所以我认为这个项目/项目的命名是特定的。)

1 个答案:

答案 0 :(得分:1)

这真的很奇怪。我试过这个:

    $app->get('/project/{projectName}', function (Request $request, $projectName) use ($app) {
   return $projectName;
})
->value('projectName', 'all')
->bind('project');


$app->get('/projects', function(Request $request) use ($app) {
    return 'TEST';
})
->bind('projects');

在浏览器中调用 / projects 对我有用。我打印出'TEST'。这应该工作。检查你的琴弦,也许你拼错了。

* 编辑19.09.2013 *

您也可以考虑通过正则表达式修改路线匹配。为此,您可以使用assert方法。这是一个例子:

$app->get('/{value}', function(Request $request) use ($app) {
    return 'TEST';
})
->bind('projects')
->assert('value', '(projects)/{0,1}');

通过使用此方法,我在打开 / projects / projects / 时获得'TEST'。这一切都取决于你想要达到的目标。另一篇有用的文章可能是How to allow slashes in routes (from the Symfony documentation)