Laravel 8 新增文章表单添加删除TinyMCE后无法提交问题排查
Laravel 8 表单提交不触发store方法排查方案
故障根因
- 最常见原因:
PostRequest表单请求验证失败,Laravel表单请求类验证不通过时会自动重定向回上一页,不会进入控制器的store方法,因此你写的dd()语句无法触发。 - 次常见原因:移除TinyMCE编辑器时残留了绑定表单提交事件的JS代码,阻止了表单正常提交,请求根本未发送到后端。
- 罕见原因:路由存在优先级冲突,同路径的其他路由先匹配到请求,未走到store对应的路由规则。
修复步骤
1. 验证是否为表单请求验证问题
临时修改store方法的注入类为基础Request,测试是否能进入方法:
public function store(\Illuminate\Http\Request $request) { dd($request->all()); // 原有逻辑暂时注释 }
如果提交后dd()正常输出,即可确认是PostRequest的验证规则不满足。重点检查PostRequest中body字段的验证规则,接入TinyMCE时你可能新增了富文本相关的验证要求(比如最小长度、允许的HTML标签规则等),移除编辑器后提交的纯文本不符合规则导致验证不通过,调整规则适配当前提交的内容格式即可。
如果dd()仍无法触发,继续下一步排查。
2. 排查前端提交阻塞问题
打开浏览器开发者工具(F12):
- 切到「控制台」面板,点击提交按钮查看是否有JS报错,重点排查是否有之前接入TinyMCE时写的提交事件监听逻辑,残留了
e.preventDefault()阻止表单默认提交行为。 - 切到「网络」面板,点击提交按钮查看是否有POST请求发送到
/admin/store地址,如果没有请求发出,清理页面残留的TinyMCE相关JS代码即可。
如果请求已发出,返回状态码为302重定向回表单页,可在表单顶部增加全局错误提示,输出所有验证报错:
{{-- 放在表单最上方 --}} @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
根据输出的报错调整提交内容或者验证规则即可。
3. 排查路由冲突
Laravel路由按从上到下的顺序匹配,你可以把storepost路由移到/admin前缀路由的最顶部,避免被带参数的路由(比如/admin/{id})提前匹配到。
4. 校验CSRF令牌
Laravel Collective的Form::open会自动生成CSRF隐藏域,你可以查看页面表单源码确认是否存在_token隐藏字段,如果缺失手动添加即可:
{!! Form::hidden('_token', csrf_token()) !!}
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

