Laravel 5.8 Form::model表单POST请求转为GET无法匹配路由问题
Laravel 5.8 Form::model() 表单提交异常排查
故障现象
Laravel 5.8项目中所有常规表单运行正常,仅通过Form::model()生成的编辑表单提交异常:已明确定义表单提交方式为POST,实际请求以GET方式发送,无法匹配后端定义的POST路由。
故障代码
{!! Form::model($nota, [ 'method' => 'POST', 'url' => ['/admin/notas', $nota->id], 'class' => 'form-horizontal', 'files' => true]) !!} @include('admin.notas.form', ['formMode' => 'edit']) {!! Form::close() !!}
验证测试
手动复制Form::model()生成的原生HTML代码直接使用,表单提交功能恢复正常,测试用代码如下:
<form method="POST" action="https://mydomain/admin/notas/{{$nota->id}}" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data"> @csrf @include('admin.notas.form', ['formMode' => 'edit']) </form>
相关说明
- 该表单此前编辑功能正常,本地WAMP环境运行无异常
- 已确认模型、控制器、路由配置均无问题,故障仅出现在提交环节,请求被强制转为GET
- 故障发生时Laravel无任何错误抛出,同站点其余表单不受影响
- 故障后续自动消失,未手动修改代码逻辑,暂未定位到明确根因,疑似服务器侧配置异常
可选排查方向
如果后续复现该问题可按以下顺序排查:
- 检查故障时生成的页面源码中
Form::model()输出的form标签是否正确包含method="POST"属性,是否被前端JS意外修改 - 检查服务器重定向规则,是否存在POST请求被301/302重定向转为GET的情况(比如http强制跳https、路径末尾斜杠补全规则)
- 确认Laravel Collective HTML包版本是否存在已知BUG,可尝试升级/降级对应包版本验证
- 检查服务器WAF/CDN规则,是否存在特定路径请求被拦截重写的情况
内容的提问来源于stack exchange,提问作者Edwin Avila
相关产品推荐
相关产品推荐

