php - Laravel 6 API请求在保存之前验证对象数组
问题描述
问题:如何正确验证通过 API 请求发送的 JSON 对象数组?
情况:
我发送了一个要保存的 JSON 对象数组的发布请求。但是,我无法进行验证。
JSON
{
"answers": [
{
"title": "hello World",
"question_id": "1"
},
{
"title": "hello World 2",
"question_id": "2"
}
]
}
尝试#1
Route::post('answer/multiple', function (Request $request) {
$answers = $request->answers;
foreach ($answers as $answer) {
$answer->validate([
'title' => 'required',
'question_id' => 'required',
]);
$new_answer = new Answer();
$new_answer->title = $answer['title'];
$new_answer->question_id = $answer['question_id'];
$new_answer->save();
}
return response()->json($request);
});
我还尝试遍历每一个进行验证,遗憾的是它不起作用。
尝试#2
Route::post('answer/multiple', function (Request $request) {
$validator = Validator::make($request->all(), [
'answer.*.title' => 'required',
'answer.*.question_id' => 'required',
]);
$answers = $request->answers;
foreach ($answers as $answer) {
$new_answer = new Answer();
$new_answer->title = $answer['title'];
$new_answer->question_id = $answer['question_id'];
$new_answer->save();
}
return response()->json($request);
});
在这一个中,验证被忽略。
解决方案
与$this->validate()
控制器方法不同,Validator::make()
如果验证失败,静态函数不会抛出错误。
您将需要检查它是否失败并使用->fails()
Validator 方法返回错误消息:
$validator = Validator::make($request->all(), [
'answer.*.title' => 'required',
'answer.*.question_id' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
foreach ($request->answers as $answer) {
$new_answer = new Answer();
$new_answer->title = $answer['title'];
$new_answer->question_id = $answer['question_id'];
$new_answer->save();
}
return response()->json($request);
或者,您可以使用以下$this->validate()
方法:
$validatedData = $this->validate($request, [
'answer.*.title' => 'required',
'answer.*.question_id' => 'required',
]);
请注意,我们使用$request
而不是$request->all()
.
另请注意,使用此方法时,您将在 中获得一系列答案$validatedData
,因此您需要相应地更改代码。
推荐阅读
- batch-file - 创建随机数并将其用作代码
- java - 嵌套类和良好实践
- xcode - iOS 模拟器在启动后崩溃并显示“可用但没有默认显示”
- javascript - 使用 Lambda@Edge 函数将网站从 Cloudfront 服务到私有 S3 存储桶时如何显示自定义 404 错误页面
- python - 类 - 使父级更改影响子级
- android - 非 IF/ElSE 适用于 SDK Build 版本
- google-chrome-extension - 我们如何通过chrome扩展调用桌面应用程序的功能
- c# - 如何确定一个值是否属于范围列表?
- javascript - 如何使用 ngx-smart-modal angular 6 通过 ngFor 循环显示对象数据?
- cakephp - HABTM 的可视化