2 votes

Symfony 2.0 : Comment valider une collection de formulaires intégrés sans entité ?

Comment valider une collection de formulaires intégrés (sans entités) dans Symfony 2.0 ? La mise à jour vers la version 2.1 n'est pas une option pratique pour le moment si la solution se trouve dans cette ligne.

J'ai essayé d'utiliser la fonction Valid et cela a fait échouer toutes les validations.

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array (
        ...

        // I tried Valid constraint but this "removes" all validation
        'travel_links' => new Valid(),
    ));

    return array ('validation_constraint' => $collectionConstraint);
}

2voto

MrR Points 171

Dans Symfony 2.1, vous pouviez utiliser l'option contraintes option :

$builder
->add('firstName', 'text', array(
   'constraints' => new Length(array('min' => 3)),
))
->add('lastName', 'text', array(
   'constraints' => array(
       new NotBlank(),
       new Length(array('min' => 3)),
),
));

Il est évident que cette n'est pas fonctionne dans Symfony 2.0 ; cependant, une option de contraintes limitées appelée contrainte_de_validation est disponible dans Symfony 2.0.

$builder
->add('firstName', 'text', array(
   'validation_constraint' => new Length(array('min' => 3)),
));

Si vous avez besoin de valider plusieurs conditions (par exemple, NotBlank, Lenght), vous pouvez vous aider en définissant une fonction Contrainte personnalisée qui fait toutes les validations en même temps :)

Edit : N'oubliez pas d'inclure use Symfony\Component\Validator\Constraints\Length ou toute autre contrainte que vous utilisez :)

0voto

Nico Points 353

Dans la version actuelle de Symfony2.x, vous pouvez définir la cascade_validation à true (par défaut, elle est false). http://symfony.com/doc/current/reference/forms/types/form.html

La documentation indique : "Réglez cette option sur true pour forcer la validation sur les types de formulaires intégrés. Par exemple, si vous avez un type de produit (ProductType) avec un type de catégorie (CategoryType) intégré, le fait de fixer la valeur de l'option cascade_validation à true pour le type de produit (ProductType) entraînera la validation des données du type de catégorie (CategoryType).

Au lieu d'utiliser cette option, vous pouvez également utiliser la contrainte Valid dans votre modèle pour forcer la validation d'un objet enfant stocké sur une propriété".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X