【问题标题】:Why would a post request in symfony recognized as GET为什么 symfony 中的 post 请求会被识别为 GET
【发布时间】:2013-09-11 08:13:02
【问题描述】:

我正在尝试将表单数据发布到 /cart/order/edit/,但它似乎不起作用,更有趣的是它在本地工作但不是实时的。

回应说

哎呀!发生错误
服务器返回“0 No route found for "GET /cart/order/edit/": Method Not Allowed (Allow: POST)”。

路由看起来像 (php 应用程序/控制台路由器:调试)

cart_order                        GET    /cart/order/
cart_order_edit                   POST   /cart/order/edit/
cart_order_save                   POST   /cart/order/save

这里是 routing.yml

#
# All routes are set up in controller source files in src/*Bundle/Controller/*Controller.php
# using annotations.
#

# Set up Bundle
CartBundle:
    resource: "@CartBundle/Controller/"
    type:     annotation
    prefix:   /

浏览器中的请求标头说

POST /cart/order/edit/HTTP/1.1

我试图找到一些意义,但没有任何意义

这是我要发布的表格:

<form  action="/../cart/order/edit/" method="POST" id="orderForm">

控制器中的路由:

 * @Route
 * (
 *    "/cart/order/edit/",
 *    name="cart_order_edit"
 * )
 *
 * @Method({"POST"})

【问题讨论】:

  • 进行 POST 的任何页面的代码是什么?
  • 您确实需要在发送请求的代码中包含诸如路由 yml 之类的关键信息
  • 问题是,为什么它在本地工作?

标签: php symfony routing


【解决方案1】:

您尝试获取仅配置为 POST 请求的操作

你用过这样的东西吗?

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
 * @Route("/blog")
 */
class PostController extends Controller
{
    /**
     * @Route("/edit/{id}")
     * @Method({"GET", "POST"})
     */
    public function editAction($id)
    {
    }
}

【讨论】:

  • 我接受你的回答,它解决了问题,但仍然不知道为什么我不能使用 POST。
  • 当您尝试使用 Web 浏览器访问 /edit/{id} 时,默认方法是 GET。您的错误消息说服务器返回了“0 No route found for "GET /cart/order/edit/": Method Not Allowed (Allow: POST)”。这意味着您尝试获取仅接受 POST 的路由。检查您的标头请求。
  • 我用我正在发布的表单和请求标头更新了我的问题,上面写着它的 POST,并发布了变量:?
【解决方案2】:

当您没有提供任何代码供参考时,很难准确地说出哪里出了问题。但是,您必须检查以下内容:

routing.yml
您的 routing.yml 文件看起来如何?应该是这样的:

route_needed:
    pattern: /cart/order/edit/
    defaults: { _controller: CartBundle:Default:edit }
    requirements:
          _method: POST

您的表单
你的表格看起来怎么样?应该是这样的:

<form action="{{ path('route_needed' }}" method="post" {{form_enctype(edit)}}>
****whatever is in your form****
{{form_rest(edit)}}
</form>

但是,由于您没有提供任何代码,我们也不知道问题出在哪里。但上面的例子来自我的一个正在运行的 Symfony2 项目。

【讨论】:

  • 但我不想只强制发布
  • 您需要定义是 POST 还是 GET。
  • 是的,我在控制器 @Method({"POST"}) 中做到了
  • 但是你也必须在你的 routing.yml 文件中定义它,就像我上面所说的那样。处理 Symfony 的 URL 等的是 routing.yml,而缺少 POST 声明的则是 routing.yml 给你这个错误。控制器中是否有它并不重要。
  • 你确定吗?我有很多控制器/动作,除此之外一切正常?
【解决方案3】:

我遇到了同样的问题。 在我的情况下是 .htaccess 重定向我的请求。 我发送了帖子,它重定向为get。 也许检查您的 htaccess 或服务器配置。

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2020-03-24
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多