Как можно было бы создать ограничение Symfony 4.2, которое проверяет несколько пакетов ограничений, но терпит неудачу только , если все из них терпят неудачу?
Вот мое использованиеcase.
Я хочу проверить переменную, которая может быть либо объектом определенного класса, либо массивом, представляющим объект того же класса.Тогда у меня будет 2 случая:
- Я бы хотел проверить ограничение
Type(type=array)
, а затем ограничение Collection(fields={...})
, чтобы убедиться, что это массив с правильной структурой, который я затем могу десериализовать и получитьobject; - или я хотел бы проверить по
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
является всегда пустым, даже если он должен потерпеть неудачу.Как будто валидатор отказывается проверять одно и то же значение дважды, даже если оно противоречит другому набору ограничений.Это правда и как это обойти?