Валидировать поля в массиве?

В Laravel существует несколько способов валидации полей массива. Вот некоторые из них:

1. Валидация в контроллере:

use IlluminateSupportFacadesValidator;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'my_array.*.field1' => 'required|string',
        'my_array.*.field2' => 'numeric',
    ]);

    if ($validator->fails()) {
        // Если валидация не прошла, возвращаем сообщения об ошибках
        return response()->json($validator->errors(), 400);
    }

    // Если валидация прошла успешно, выполняем сохранение в базу данных или другие действия
}

В этом примере my_array - это имя поля массива в запросе. * после my_array указывает, что мы валидируем каждый элемент массива. field1 и field2 - это названия полей, которые нужно валидировать. Мы также указываем правила валидации для каждого поля.

2. Валидация внутри форм-реквеста:

Вы можете создать свой собственный класс форм-реквеста, который содержит правила валидации:

class MyRequest extends FormRequest
{
    public function rules()
    {
        return [
            'my_array.*.field1' => 'required|string',
            'my_array.*.field2' => 'numeric',
        ];
    }
}

Используйте этот класс в вашем контроллере:

public function store(MyRequest $request)
{
    // Если все правила валидации пройдены, Laravel автоматически переходит к этому месту
}

3. Расширение правил валидации:

Вы можете создать свое собственное правило валидации, которое позволит вам настроить более сложную логику проверки для полей массива. Для этого вам нужно создать класс правила валидации:

use IlluminateContractsValidationRule;

class CustomRule implements Rule
{
    public function passes($attribute, $value)
    {
        // Добавьте здесь свою логику проверки поля массива
    }

    public function message()
    {
        return 'Поле массива не прошло проверку.';
    }
}

Затем вы можете использовать это правило в своем классе форм-реквеста или непосредственно в контроллере:

use AppRulesCustomRule;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'my_array.*' => ['required', new CustomRule],
    ]);

    if ($validator->fails()) {
        // Обрабатываем ошибку валидации
    }
    // ...
}

В каждом из этих способов вы можете настроить необходимую логику валидации для полей массива, чтобы убедиться, что они соответствуют вашим требованиям.