【问题标题】:Laravel MethodNotAllowedHttpException on POST formPOST 表单上的 Laravel MethodNotAllowedHttpException
【发布时间】:2015-06-02 08:05:48
【问题描述】:

我在 Laravel 中的 POST 表单有一个奇怪的问题。

发送 post 请求时,我的 Laravel 会抛出 MethodNotAllowedHttpException。查看错误消息后,我可以看到 Laravel 认为我的请求是 GET 请求,但事实并非如此。

当查看错误页面的 POST 数据和 GET 数据时,Laravel 似乎认为它们都是空的。 这让我有点困惑,因为似乎正在进行某种重定向,错误上的 HTTP_REFERER 是我发布的页面。

我以前遇到过这个问题,制作命名路由解决了我的问题,但我正在制作一个简单的 CMS,因此使用了表单模板,我无法使用命名路由,除非允许用户使用 Blade 语法,这是一个坏主意。

我的路线如下(简化为“Hello world”):

Route::post('/signup/add', function(){
    echo "Hello world"; 
});

http://pastebin.com/EsAeyHFx

http://pastebin.com/ByHdUFcK

对此更奇怪的部分是我有另一个表单(登录表单)不会导致这种行为。

我一直在查看有关 StackOverflow 的其他几个问题,但它们似乎最终都是将 POST 数据发送到 GET 路由的错误。这不是我的情况。

如果我将路由从 POST 更改为 GET,它可以正常工作。

我还尝试将表单的操作更改为 GET 并使用隐藏字段 _method 并将其设置为 post - 没有成功。

谁能告诉我这个异常发生了什么以及如何解决它?

添加: 经过一些实验,我发现当使用 3rd 方软件(如 chrome 扩展 Postman)并向页面发送 POST 请求时,它可以正常工作。

【问题讨论】:

  • 在表单的“action”属性中尝试 URL::to('/signup/add/') 而不仅仅是“/signup/add”。根据您的应用程序的文件夹结构,它可能会发生变化。
  • 表单是纯html,所以action应该是不能改变的。检查表单时,操作仍然是“/signup/add”。并且表单是模板的一部分,所以我只能使用 html,不能使用 Laravel 或 Blade(问题中可能不完全清楚)
  • 能把表单页面的整个html源码贴出来吗?我认为问题出在这个页面上。我尝试使用您的代码构建一个简单的表单,并且成功了。
  • 尝试从任何 REST 客户端(如 this)向 URL 发出正常的 POST 请求,如果它正常工作,则问题出在 HTML 页面上。
  • 感谢您的宝贵时间 - 我找到了问题 :) 现在就回答!

标签: php laravel laravel-routing


【解决方案1】:

MethodNotAllowedHttpException 错误表示查询的动词与预期的路由不一致。

做一个 php artisan route: list 用于列出路由并查看开发工具

【讨论】:

    【解决方案2】:

    好的,经过一番挖掘,在jsfiddle中制作表单,使用jQuery等,我发现了问题!

    我的表单在 action 属性中有一个斜杠,据说这是不允许的。

    解决方案只是将我的代码更改为 action="/signup/add" 而不是 action="/signup/add/

    老兄,我觉得自己很蠢……

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2018-11-25
      • 2018-10-08
      • 2019-07-30
      • 2018-09-06
      • 2019-06-28
      • 2016-05-23
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多