📅  最后修改于: 2023-12-03 14:52:46.770000             🧑  作者: Mango
在 Laravel 中,我们经常需要对数组中的对象进行验证。这在处理用户提交的表单数据或者 API 请求时非常常见。本文将介绍如何在 Laravel 中验证数组中对象的值。
假设我们有一个数组,其中包含多个对象,每个对象都有一个 name
字段和一个 age
字段。我们希望对这个数组进行验证,以确保每个对象的 name
字段是一个非空字符串,age
字段是一个大于等于 18 的整数。
以下是在 Laravel 中实现这种验证的步骤:
首先,我们需要创建一个自定义的验证规则类。在 Laravel 中,我们通过继承 Illuminate\Contracts\Validation\Rule
接口来创建自定义的验证规则。
创建一个名为 ObjectArrayValidationRule
的类,并实现 passes
和 message
方法。passes
方法用于执行实际的验证逻辑,message
方法用于定义验证失败时返回的错误消息。
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class ObjectArrayValidationRule implements Rule
{
public function passes($attribute, $value)
{
foreach ($value as $item) {
if (empty($item['name']) || !is_string($item['name'])) {
return false;
}
if (empty($item['age']) || !is_int($item['age']) || $item['age'] < 18) {
return false;
}
}
return true;
}
public function message()
{
return 'The :attribute must be an array of objects with valid name and age fields.';
}
}
一旦我们创建了验证规则类,就可以在表单验证或者控制器中使用它了。
use App\Rules\ObjectArrayValidationRule;
use Illuminate\Support\Facades\Validator;
$data = [
[
'name' => 'John Doe',
'age' => 20,
],
[
'name' => 'Jane Smith',
'age' => 25,
],
];
$validator = Validator::make($data, [
'*.name' => ['required', 'string'],
'*.age' => ['required', 'integer', 'min:18'],
]);
if ($validator->fails()) {
// 验证失败
$errors = $validator->errors();
// 进一步处理错误信息
} else {
// 验证成功
// 继续处理数据
}
在上面的示例中,我们使用了 Laravel 内置的 Validator
类来创建一个验证器实例。我们在验证规则中使用了 *
来指定数组中的每个对象,在这个对象中进行规则验证。
在默认情况下,Laravel 会提供一些通用的错误消息。但是,我们也可以自定义每个字段的错误消息。
$customMessages = [
'*.name.required' => 'The name field is required.',
'*.name.string' => 'The name field must be a string.',
'*.age.required' => 'The age field is required.',
'*.age.integer' => 'The age field must be an integer.',
'*.age.min' => 'The age field must be at least 18.',
];
$validator = Validator::make($data, [
'*.name' => ['required', 'string'],
'*.age' => ['required', 'integer', 'min:18'],
], $customMessages);
在上面的示例中,我们使用 $customMessages
数组来定义自定义的错误消息。
这样我们就可以在 Laravel 中验证数组中对象的值了。你可以根据实际需求对验证规则进行更改,并根据需要自定义错误消息。
希望这篇文章对你有所帮助!