找不到“GET / test / information / 1 / name”的路由:方法不允许(允许:PUT)

时间:2013-06-20 07:07:36

标签: php rest symfony

我正在尝试使用“/ test / item / 1 / name”通过“PUT”方法更新字段,我收到以下错误 “找不到”GET / test / item / 1 / name“的路线:不允许的方法(允许:PUT)

如果我将方法更改为“POST”

,相同的路线将起作用

我甚至尝试在处理请求之前在app.php中添加“ Request :: enableHttpMethodParameterOverride(); ”(即在“$ request = Request :: createFromGlobals();”之前) https://github.com/sensiolabs/SensioGeneratorBundle/issues/165

我的路由配置

information_set_name:
  pattern:  /item/{id}/name
  defaults: { _controller: TestInformationBundle:Item:setName, _format: json }
  requirements: { _method: put, id: \d+ }

symfony版本:“v2.2.1”

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您在开发模式下工作,则需要在app_dev.php中添加Request::enableHttpMethodParameterOverride();(正如我从错误消息中看到的那样)。

你应该为你的_method param使用另一种约束方式:

information_set_name:
  pattern:  /item/{id}/name
  defaults: { _controller: TestInformationBundle:Item:setName, _format: json }
  requirements: { id: \d+ }
  methods:   [PUT]

请参阅文章http://symfony.com/doc/current/cookbook/routing/method_parameters.html

答案 1 :(得分:1)

对于遇到同样问题的每个人。 有时候路由是正确的,但是如果你的控制器中有错误,Symfony会返回通知“找不到路由”。事实并非如此,只是尝试将return语句放在控制器的第一行,然后检查会发生什么。 您应该“状态200 OK”