0

如果我有这样的 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/")。

引擎盖下是否有一些多元化逻辑可以防止这种情况发生,或者还有什么可能在这里干扰?(当将第二条路线重命名为其他任何东西时它工作得很好,所以我认为这个项目/项目命名有一些特定的东西。)

4

1 回答 1

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对我有用。我打印了“测试”。这应该有效。检查你的字符串,也许你拼错了什么。

*编辑 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(来自 Symfony 文档)

于 2013-09-16T18:45:30.737 回答