Laravel 5.8 POST路由不生效,提交表单仅刷新无dd输出如何解决
问题原因
- 路由匹配优先级错误:Laravel 路由按定义顺序匹配,如果你当前定义的POST路由上方存在同路径的GET路由、或更宽泛的通配符路由,请求会被优先匹配到其他路由,没有进入目标控制器方法。
- 路由参数错误:表单中
last(request()->segments())取到的ID值不符合要求、或者为空,导致生成的action路径和定义的POST路由不匹配,触发404后被重定向。 - 中间件拦截:路由或控制器绑定的前置中间件(如登录校验、权限校验、CSRF校验等)在请求进入目标方法前就触发了重定向逻辑,直接跳过了你的代码。
- 前端逻辑拦截:页面存在JS代码拦截了表单的submit事件,阻止了默认提交行为,或发起异步请求后自行触发了页面刷新,导致没有触发后端响应。
- 全局异常/跳转逻辑:
APP_DEBUG关闭的情况下,请求触发404、419等错误时被全局异常处理器重定向到当前页或其他页面,看起来就像页面无报错刷新。
解决方法
排查路由匹配与参数问题:
执行命令php artisan route:list确认accept.walletCourse路由存在、请求方法为POST、路径正确,并且把该路由的定义移到所有同路径前缀的其他路由上方,避免被其他路由抢先匹配。同时在表单页面打印输出{{ route('accept.walletCourse',['id'=>last(request()->segments())]) }},确认生成的action路径、ID参数和预期一致。开启Debug排查响应状态:
将项目.env文件中的APP_DEBUG参数改为true,打开浏览器开发者工具的「网络」标签,提交表单后查看POST请求的状态码和响应内容:
- 如果是302跳转,可查看跳转目标地址,确认是中间件拦截还是错误跳转;
- 如果是419状态码,说明CSRF校验失败,可排查表单
@csrf是否正常生成token,或者临时在路由中加入->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class)测试验证。
排查中间件拦截:
查看路由所在的路由组、控制器__construct方法中绑定的中间件,可临时给路由加上->withoutMiddleware()跳过所有中间件测试,如果能正常输出dd结果,再逐一排查是哪个中间件的拦截逻辑导致的问题。排查前端逻辑:
禁用浏览器JS后再次提交表单,如果此时能正常输出dd结果,说明是前端JS代码拦截了表单提交,排查对应JS逻辑即可。
内容的提问来源于stack exchange,提问作者user17001698
相关产品推荐
相关产品推荐

