📜  如何在laravel中验证arraye中对象的值 - PHP(1)

📅  最后修改于: 2023-12-03 14:52:46.770000             🧑  作者: Mango

如何在 Laravel 中验证数组中对象的值

在 Laravel 中,我们经常需要对数组中的对象进行验证。这在处理用户提交的表单数据或者 API 请求时非常常见。本文将介绍如何在 Laravel 中验证数组中对象的值。

假设我们有一个数组,其中包含多个对象,每个对象都有一个 name 字段和一个 age 字段。我们希望对这个数组进行验证,以确保每个对象的 name 字段是一个非空字符串,age 字段是一个大于等于 18 的整数。

以下是在 Laravel 中实现这种验证的步骤:

第一步:创建验证规则类

首先,我们需要创建一个自定义的验证规则类。在 Laravel 中,我们通过继承 Illuminate\Contracts\Validation\Rule 接口来创建自定义的验证规则。

创建一个名为 ObjectArrayValidationRule 的类,并实现 passesmessage 方法。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 中验证数组中对象的值了。你可以根据实际需求对验证规则进行更改,并根据需要自定义错误消息。

希望这篇文章对你有所帮助!