【发布时间】:2020-11-02 23:34:38
【问题描述】:
我在我的 Laravel 控制器上做一个简单的验证:
public function updateInfo(Request $request) {
$validator = $request->validate([
"name" => ["string", "nullable"],
"email" => ["email", "nullable"],
"currentPassword" => ["password:api"]
]);
return json_encode($validator);
}
我的问题是,如果验证失败,这个验证会将我重定向到家,并且我通过 AJAX 发出请求,我知道 Laravel 检测到请求何时通过 Ajax,但它仅在是正常请求时才有效(典型的请求,其中我使用Content Type application/json 发送标头,在正文中我发送了一个普通的 JSON
但是当 te Ajax 请求不是 Content Type application/json 时,Laravel 无法检测到,我正在使用 JavaScript 的 FormData() 对象,所以,我没有发送标头 Content Type application/json,并且在正文中我发送了 FormData 对象。
我认为它模拟了重新加载页面的典型 HTTP 请求,因此 Laravel 无法检测到它,但它给我的 ajax 响应带来了麻烦,因为 Laravel 响应重定向并且在我的 Ajax 响应中我正在捕捉主页的 HTML 代码。
我能做什么?
【问题讨论】:
-
使用手动验证器:laravel.com/docs/7.x/validation#manually-creating-validators 如果验证失败,您将完全控制如何处理。
-
我试过了,现在我可以捕获错误,但是现在当我使用
$validator->errors()->all()获取错误数组时,它只给了我错误的关键:["validation.password"]但消息是不在场,你知道发生了什么吗? -
我没有想到,因为 Validator 类有点奇怪。
$validator->errors()(没有->all())应该返回你正在寻找的我认为?作为参考,这里使用的是 Validator 和 MessageBag 类:laravel.com/api/7.x/Illuminate/Contracts/Validation/… 和 laravel.com/api/7.x/Illuminate/Support/MessageBag.html(通过$validator->errors()) -
是的,但是它返回一个数组,该数组带有键,我发现了问题,我没有在我的 lang 文件中定义该索引,谢谢!!!
-
啊,有道理!顺便说一句,我的评论只是为您指明正确的方向;您应该将您的解决方案作为答案发布,或者,如果以下解决方案之一有帮助,请考虑对其进行投票和/或接受其中一个(您做到了,干杯!)
标签: php ajax laravel validation form-data