Laravel中PATCH请求失效但POST请求正常的问题排查
Laravel中PATCH请求失效但POST请求正常的问题排查
嘿,我碰到好几个开发者朋友遇到过类似的情况,咱们一步步来揪出问题所在!
最可能的原因:CSRF令牌缺失
Laravel对所有非GET类型的请求(包括PATCH、POST、PUT等)都要求携带CSRF令牌做验证,这是框架的安全机制。你说POST请求正常,大概率是之前的POST请求里正确带了令牌,但这次的PATCH请求漏掉了。
看你的原生JS代码,你创建了FormData但没有加入CSRF令牌,这会导致请求被Laravel的VerifyCsrfToken中间件拦截,直接返回403错误。
解决方法很简单,把令牌加到FormData里就行:
document.getElementById('patates').addEventListener('click', function() { var formData = new FormData(); formData.append('sayi', 123); // 加入CSRF令牌 formData.append('_token', document.querySelector('meta[name="csrf-token"]').content); var url = `{{ route('magaza.urun.guncelle.submit', ['id' => 你的ID值]) }}`; // 确保请求方法设置为PATCH fetch(url, { method: 'PATCH', body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); });
其他需要排查的点
- 确认请求方法是否正确:检查你的JS代码里是不是真的把请求方法设置成了
PATCH,有时候不小心写成POST或者配置错误,会导致请求走不到对应的路由。 - 路由参数是否正确:你的路由需要
{id}参数,确保拼接URL时传入了有效的ID值,避免因为路由不匹配导致请求没有到达控制器。 - 中间件拦截:如果你的路由被自定义中间件保护,检查中间件是否对PATCH请求有额外的限制,比如权限验证之类的。
备注:内容来源于stack exchange,提问作者achilles
相关产品推荐
相关产品推荐

