2015-07-20 6 views
0

J'ai essayé d'ajouter un validateur dynamique à une collection, mais tout ce que j'ai essayé n'a pas fonctionné.Validateurs de collection dynamique ZF2

Si j'ai - disons - 3 fieldsets dans une collection, je veux seulement que le second fieldset (avec le nom "1") ait un champ obligatoire.

$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()); 
+0

Non, je ne pense pas que vous pouvez le faire. Puisque le filtre d'entrée pour les fieldsets est la même instance. – Pradeep

+0

Je peux parcourir pour fieldset après que le formulaire soit lié à l'objet entité et avant que le formulaire ne soit validé, je peux définir pour chaque groupe de validation ou ajouter un nouveau validateur mais ne pas en tenir compte. ce n'est pas une bonne idée si vous avez une forme de un à plusieurs, dans la partie de l'objet plusieurs peuvent avoir des exigences différentes – user3143015

+0

Essayez d'imprimer l'identifiant de l'objet du filtre d'entrée pour chaque fieldset. Il imprime le même identifiant d'objet, donc si vous attachez des validateurs différents, il modifiera le même objet encore et encore, de sorte qu'il ne prendra pas effet. – Pradeep

Répondre

0

Vérifiez ceci: http://www.aronkerr.com/2013/11/zf2-form-collection-validation-unique.html Il en ajoutant des valeurs uniques pour un élément dans une collection fieldset. Il étend le InputCollectionFilter. Vous pouvez faire la même chose pour votre validation de clé personnalisée.

Vous devez étendre la méthode isValid à partir de CollectionInputFilter. Écrivez votre propre CollectionInputFilter et étendez-le à partir de Zend \ InputFilter \ CollectionInputFilter.

Ajoutez votre propre propriété:

protected validateFieldsetKeys = array() 

pour l'exemple avec un setter Méthode.

Lorsque vous êtes en ajoutant votre CollectionInputfilter (dans votre usine ou contrôleur), il suffit d'appeler votre propre et ajoutez vos fieldsetkeys comme ceci:

$collection_input_filter = new CollectionInputFilter(); 
$collection_input_filter->setValidateFieldsetKeys(array(2,3));