【问题标题】:No route found for "GET /test/information/1/name": Method Not Allowed (Allow: PUT)找不到“GET /test/information/1/name”的路由:不允许方法(允许:PUT)
【发布时间】:2013-06-16 22:29:25
【问题描述】:

我正在尝试通过“PUT”方法使用“/test/item/1/name”更新字段,但出现以下错误 "未找到 "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”

提前致谢

【问题讨论】:

    标签: php rest symfony


    【解决方案1】:

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

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

    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

    【讨论】:

    • 我已经尝试单独添加方法和要求,但问题仍然存在。如果我通过启用调试模式来处理 app.php 会有所不同吗?
    • 如果我将方法从 PUT 更改为 POST,路线没有问题
    【解决方案2】:

    适用于所有遇到相同问题的人。 有时路由是正确的,但如果你的控制器有错误,Symfony 会返回通知“No route found”。这不是真的,只需尝试将 return 语句放在控制器的第一行,然后检查会发生什么。 你应该得到“status 200 OK”

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 2015-09-06
      • 2023-03-23
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2021-07-01
      相关资源
      最近更新 更多