Laravel POST 参数过多引发的 405错误
Laravel 中,更新一个资源应该使用 PUT
方法。但是在实现中, FORM 表单只支持 POST
,GET
方法,在其中添加 _method
字段让 Laravel 将请求当作 PUT
,DELETE
等字段。
今天正常运行的系统突然无法更新数据,HTTP STATUS 405
提示信息为:
1 | The POST method is not supported for this route. Supported methods: GET,HEAD,PUT,PATCH,DELETE. |
由于这个错误提示的误导,我一直以为是路由出了问题,往这方面排查了挺长时间。
最终通过查看站点日志,发现 PHP 报错了:
1 | FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0" while reading response header from upstream |
到此问题就很清楚了,报错的表单中有很多 checkbox
导致处于表单末尾的 _method
因为默认最大提交限制为 1000 的问题无法被系统接收到,从而导致系统无法根据 _method
项来用 PUT
方式处理 POST
请求。
处理方法也很简单,在 php.ini
中修改 max_input_vars
的值即可。记得要去掉配置项前面的 ;
符号,不然不会生效(我第一次更改后还是报错,以为不是这里的问题,检查后才发现值虽然改了,但是默认是注释状态)。
Laravel POST 参数过多引发的 405错误