Как создать ограничение OR для Symfony Validator - PullRequest
0 голосов
/ 03 февраля 2019

Как можно было бы создать ограничение Symfony 4.2, которое проверяет несколько пакетов ограничений, но терпит неудачу только , если все из них терпят неудачу?

Вот мое использованиеcase.

Я хочу проверить переменную, которая может быть либо объектом определенного класса, либо массивом, представляющим объект того же класса.Тогда у меня будет 2 случая:

  1. Я бы хотел проверить ограничение Type(type=array), а затем ограничение Collection(fields={...}), чтобы убедиться, что это массив с правильной структурой, который я затем могу десериализовать и получитьobject;
  2. или я хотел бы проверить по Type(type=MyClassName).

Итак, окончательное ограничение должно быть успешным, если прецедент 1 или 2 преуспевает, и должно завершиться неудачей, только если обатерпеть неудачу (скажем, string пройдено).

Я чувствую, что группы могут быть как-то полезны, но я не совсем уверен, как именно их использовать в этом случае.


Iуже есть идея, как это реализовать, но каким-то образом это терпит неудачу, и я не могу понять, почему:

$violations1 = $this->context->getValidator()->validate($value, $constraints1);
$violations2 = $this->context->getValidator()->validate($value, $constraints2);

// Check both violations and if at least one of them is empty - succeed.
// If all of them fail, copy violations to the current context.

Как вы можете видеть, я бы проверил значение по $constraints1, которое является массивом ограниченийпроверить, является ли значение допустимым массивом.Тогда я бы проверил значение по $constraints2, который представляет собой другой массив ограничений, который проверяет, является ли значение объектом определенного класса.

На данный момент я хочу просто скопировать нарушения и потерпеть неудачу или успешноесли либо $violations1, либо $violations2 пустые.

Проблема в том, что по какой-то причине $violations2 является всегда пустым, даже если он должен потерпеть неудачу.Как будто валидатор отказывается проверять одно и то же значение дважды, даже если оно противоречит другому набору ограничений.Это правда и как это обойти?

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете использовать ограничение выражения .Позволяет комбинировать несколько тестов с 'или'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...