Laravel 5.8中PUT/DELETE请求报GET方法不支持问题求助
解决Laravel 5.8中更新/删除操作的GET方法不支持错误
我一眼就揪出问题所在了——你的表单按钮类型不对,导致表单根本没按预期提交!
问题根源
你在编辑表单和删除表单里用的都是type="button"的按钮:
<button type="button" class="btn btn-outline-success">Submit</button> <!-- 删除按钮也是同样问题 --> <button type="button" class="btn btn-outline-danger">Danger</button>
这种类型的按钮不会自动触发表单提交,所以当你点击它的时候,表单并没有发送包含PUT/DELETE方法伪造的POST请求。如果这时候误触发了路由访问(比如浏览器的默认行为或误操作),就会变成GET请求,而你的路由只支持PUT/DELETE,自然就抛出不支持GET方法的错误了。
解决方案
把两个表单里的按钮类型改成type="submit",让按钮自动提交表单:
修改后的编辑表单按钮:
<button type="submit" class="btn btn-outline-success">Submit</button>
修改后的删除表单按钮:
<button type="submit" class="btn btn-outline-danger">Danger</button>
补充说明
Laravel的method_field('PUT')和method_field('DELETE')是通过POST表单伪造HTTP请求方法的——浏览器本身不支持PUT/DELETE,所以Laravel会给POST请求加上_method参数,框架内部再转换成对应的请求方法。只有表单正常提交(通过submit按钮或JS手动提交),这个机制才能生效。
如果因为特殊需求必须用type="button",那可以给按钮加JavaScript事件手动提交表单,比如:
<button type="button" class="btn btn-outline-success" onclick="this.form.submit()">Submit</button>
但显然直接用type="submit"是最简单可靠的方案。
内容的提问来源于stack exchange,提问作者Web Developer
相关产品推荐
相关产品推荐

