【问题标题】:Validate POST request Laravel?验证 POST 请求 Laravel?
【发布时间】:2018-03-23 14:34:05
【问题描述】:
我验证 POST 请求,例如:
$validator = Validator::make($request->all(), [
"id.*" => 'required|integer'
]);
if ($validator->fails()) {
return response()->json($validator->errors, 400);
}
echo "Ok";
当我发送不带参数id 的请求时,它会跳过验证并返回echo "Ok";。
为什么验证不起作用?
【问题讨论】:
标签:
laravel
laravel-5.3
laravel-5.4
laravel-validation
laravel-5.5
【解决方案1】:
如果您希望 id 是整数数组,您应该像这样更新验证规则:
$validator = Validator::make($request->all(), [
"id" => 'required|array',
"id.*" => 'integer'
]);
【解决方案2】:
首先知道什么时候使用 $request->validate();当它失败时引发异常!
它们由 laravel 自动处理。如果是 get 或 普通的发布表单, 则 该过程将重定向回表单。
需要注意的是,在 AJAX 请求期间使用 validate 方法时,Laravel 不会生成重定向响应。 相反,Laravel 会生成一个包含所有验证错误的 JSON 响应。此 JSON 响应将与 422 HTTP 状态代码一起发送。
如果你不想有这样的自动行为,手动创建一个验证器,然后你可以用 ->fails() 方法检查,如示例所示波纹管。在很多情况下,这可能是少数。
<?php
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
}
没有比文档本身更好的了:https://laravel.com/docs/5.7/validation
有很多选项可以个性化我们的验证过程。