Symfony2: Как я могу проверить объект / массив с его ограничениями в другом объекте / массиве?

Он построен динамически, аннотации не вариант. У меня есть ограничения в массиве.

Кажется, вам нужно вручную создать валидатор, но я быстро застрял в точке, где вам нужно создать MetaDataFactory, который нуждается в загрузчике, но все загрузчики имеют задачу загрузки метаданных из файла... Я не думаю, что я " Я делаю это правильно.

Просто сказал:

У меня есть массив / объект с ключами / значениями. Я хочу, чтобы они были проверены другим массивом, который содержит ограничения.

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

$array = [
  'key1' => 'abc',
  'key2' => 'def',
];

$constraints = [
  'key1' => new All([
    new Constraint..,
    new CallbackConstraint.., // <- this one checks key2 for its value      
  ]),
  'key2' => new NotBlank
];

Я также могу построить один массив, содержащий оба.

Againt, объект / массив создается динамически, я не могу проверить сам контейнер. Речь идет о ключах внутри него, которые сами по себе являются определениями.

Так что я бы хотел:

$validator->validate($array, $constraints); 

Я могу представить, что вам нужен собственный класс MetaDataFactory / Loader / Context или что-то в этом роде, проблема в том, что для проверки обратного вызова нужен доступ $this->getRoot() чтобы добраться до других ценностей

Не говоря уже о том, что вам нужно что-то вроде CallbackLoader, в котором вы создаете свое собственное отображение свойств => ограничений. Но LoaderInterface требует конкретной реализации ClassMetaData, которая сама по себе не имеет никакого способа работать с массивами или ArrayObjects, если у вас нет методов / свойств для этого ArrayObject. Но - так как мой контейнер построен динамически, я не могу этого иметь. Методы методов не являются опцией из-за вызовов свойства /method_exists.

0 ответов

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