Respect Validation: Какое правильное правило проверки, когда форма имеет несколько полей с одинаковым именем?

У меня есть форма, которая имеет только поля:

  • вопрос
  • выбор

Выбор - это массив, потому что у вопроса больше ответов, и пользователь может добавить столько, сколько мне нужно.

Мне просто нужно проверить, что они не пусты, поэтому я попытался:

$validation = $this->c->validator->validate($request, [
            'question' => v::notEmpty(),
            'choice[]' => v::ArrayVal()->each()->notEmpty()
        ]);

Но это не позволяет мне сохранить любую запись. Если я оставлю выбор [] как "выбор", он проверяет каждую запись. Я предполагаю, что правило должно быть неправильным.

1 ответ

Решение

Вы можете использовать валидатор KeySet:

$response = v::keySet(
    v::key('question', v::notEmpty()),
    v::key('choice', v::arrayVal())
)->validate($request);

В случае если вы используете данное значение:

$request = [
    'question' => 'What is your first name?',
    'choice' => []
];

проверка возвращается true,

В случае если вы используете данное значение:

$request = [
    'question' => 'What is your first name?',
    'choice' => ''
];

проверка возвращается false,

Другие вопросы по тегам