Валидаторы динамической коллекции ZF2

Я пытался добавить динамический валидатор в коллекцию, но все, что я пробовал, не сработало.

Если у меня есть, скажем, 3 набора полей в коллекции, я хочу, чтобы второй набор полей (с именем «1») имел обязательное поле.

$input_filter = new Filter\Edit();
$collection_input_filter = new CollectionInputFilter();

$orderDetailFilter = new Filter\OrderDetail($serviceManager);
$collection_input_filter->setInputFilter($orderDetailFilter);

$input_filter->add($collection_input_filter, 'details');

$this->setInputFilter($input_filter)
    ->setHydrator(new DoctrineHydrator($entityManager))
    ->setObject(new Order());

person user3143015    schedule 20.07.2015    source источник
comment
Нет, я не думаю, что ты сможешь это сделать. Поскольку входной фильтр для наборов полей является одним и тем же экземпляром.   -  person Pradeep    schedule 22.07.2015
comment
я могу выполнить итерацию для набора полей после того, как форма будет привязана к объекту сущности, и до того, как форма будет проверена, я могу установить для каждой группы проверки или добавить новый валидатор, но не учитывать. это не очень хорошо, если у вас есть форма «один ко многим», во многих частях объекта могут быть разные требования   -  person user3143015    schedule 24.07.2015
comment
Попробуйте напечатать идентификатор объекта входного фильтра для каждого набора полей. Он будет печатать один и тот же идентификатор объекта, поэтому, если вы прикрепите разные валидаторы, он будет изменять один и тот же объект снова и снова, поэтому он не вступит в силу.   -  person Pradeep    schedule 24.07.2015
comment
так что это может быть функцией для валидаторов zf2 в будущем? в любом случае, я все еще жду решения, может быть, кто-то взломает или что-то в этом роде.   -  person user3143015    schedule 25.07.2015


Ответы (1)


Проверьте это: http://www.aronkerr.com/2013/11/zf2-form-collection-validation-unique.html Он добавляет уникальные значения для элемента в наборе полей. Он расширяет InputCollectionFilter. Вы можете сделать то же самое для проверки вашего пользовательского ключа.

Вы должны расширить метод isValid из CollectionInputFilter. Напишите свой собственный CollectionInputFilter и расширьте его из Zend\InputFilter\CollectionInputFilter.

Добавьте свое свойство:

protected validateFieldsetKeys = array()

Например, с методом установки.

Когда вы добавляете свой CollectionInputfilter (на вашем заводе или контроллере), просто вызовите свой собственный и добавьте свои наборы полей следующим образом:

$collection_input_filter = new CollectionInputFilter();
$collection_input_filter->setValidateFieldsetKeys(array(2,3));
person Sascha    schedule 29.07.2015