POST窗体上的Laravel MethodNotAllowedHttpException

时间:2015-03-29 08:18:57

标签: php laravel laravel-routing

我在Laravel中遇到一个关于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< - 完整routes.php

http://pastebin.com/ByHdUFcK< - 我的表格。没有什么花哨的,只有纯文本/ radiobuttons输入。没有HTML或任何特殊的东西。

更奇怪的是,我有另一种形式(登录表单)不会导致这种行为。

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

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

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

有人可以告诉我这个例外是怎么回事以及如何修复它吗?

增加: 经过一些实验,我发现当使用第三方软件(比如chrome扩展Postman)并向页面发送POST请求时,它就像有意思一样。

2 个答案:

答案 0 :(得分:9)

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

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

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

伙计,我觉得自己很蠢......

答案 1 :(得分:0)

MethodNotAllowedHttpException错误意味着查询的动词与预期的路线不一致。

执行 php artisan路线:列表以列出路线并查看开发工具