我在Silex Framework中开发了一个小后端。 我试着让这个请求在POST上运行:
但是当使用mount操作时,只有这个请求有效:
如您所见,我必须为请求添加额外的尾部斜杠。
以下是一些没有按预期工作的代码:
//index.php
$app->mount("/other", new FeedbackOther());
//FeedbackOther.php
$feedbackOther->get("/", "FeedbackOtherController::index")->bind('other');
$feedbackOther->post("","FeedbackOtherController::store");
如果我做的话
//index.php
$app->post('/other', "FeedbackOtherController::store");
$app->mount("/other", new FeedbackOther());
//FeedbackOther.php
$feedbackOther->get("/", "FeedbackOtherController::index")->bind('other');
POST请求在没有额外斜杠的情况下工作,但在这种情况下,我没有看到使用挂载操作的重点。
我也尝试过使用.htacces重写,但重写规则会转换GET中的POST请求。
答案 0 :(得分:4)
安装路线集合并简单地将路线限制为mount
之间存在差异。添加/other
意味着在特定名称空间下创建了一组路由,在您的情况下为/other/
。意味着此命名空间的默认URL为post
- 也需要尾随斜杠。当您定义到特定方法的路由时,这不适用,例如Silex
。简而言之 - 这也是Symfony
和{{1}}中的预期行为。不久之前在github上对此进行了大量讨论,所以让我复制/粘贴Fabien留下的笔记(作者):
让我解释已安装路由的当前行为,以便每个人都能理解这个线程中几个人解释的行为(这个行为与Symfony中的行为相同,因此它也适用于Symfony)。
最简单的URL可能是/(空URL不代表任何内容,并且由浏览器静默转换为/,因此当您请求http://google.com时,实际请求是http://google.com/)。< / p>
在前缀下挂载路由集合时,Silex / Symfony会为这些URL创建新的“命名空间”。在路径集合中定义/然后将其安装在/ foo下时,访问此路由的URL为/ foo /。在这种情况下请求/ foo没有意义。
因此,截至今天,在/ foo下挂载路由集合时,无法为/ foo定义回调。我可以看到当前行为的局限性,但我想不出一个不会感到hackish的可能解决方案。
如果你对整个故事感兴趣 - this就是引用的地方。