【发布时间】: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";
});
对此更奇怪的部分是我有另一个表单(登录表单)不会导致这种行为。
我一直在查看有关 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