Laravel5.8 表单验证 不返回 422
直接上代码 :
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|min:2|max:10',
'phone' => 'required',
'province' => 'required',
'city' => 'required',
'area' => 'required',
'detail' => 'required|max:50',
]);
$data['user_id'] = $this->user->id;
UserAddress::create($data);
return response()->json(['success' => true]);
}
如上代码当前端请求的时候 不满足验证规则的时候 直接跳转到 首页了 就是 laravel 字样那个页面
无奈只能修改成如下代码:
public function store(Request $request)
{
$result = Validator::make($request->all(), [
'name' => 'required|min:2',
'phone' => 'required',
'province' => 'required',
'city' => 'required',
'area' => 'required',
'detail' => 'required|max:50',
]);
if ($result->fails()) {
return response()->json($result->errors(), 422);
}
$data = $request->toArray();
$data['user_id'] = $this->user->id;
UserAddress::create($data);
return response()->json(['success' => true]);
}
查看文档 感觉也没问题
AJAX 请求 & 验证
在这个例子中,我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate 方法时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息的 JSON 响应。这个 JSON 响应会包含一个 HTTP 状态码 422 被发送出去。
没搞明白为什么 ?
你前端要用 ajax 请求,响应(包括错误)才会自动转成 json