2016-09-10 2 views
2

Impossible de faire fonctionner les groupes de validation. Il travaille pour le groupe par défaut, mais je ne peux pas l'air de comprendre comment spécifier différents groupes de validation dans les domaines suivants:Groupes de validation Symfony (pas les formulaires)

$errors = $validator->validate($entity); 

J'ai une simple entité je teste avec:

/** 
* Class Login 
* @package AppBundle\Entity 
*/ 
class Login 
{ 
    /** 
    * @Assert\NotBlank(
    *  message="not.blank", 
    *  groups={"Default", "login"} 
    *) 
    * 
    * @Assert\Email(
    *  message="email", 
    *  groups={"Default", "login"} 
    *) 
    */ 
    public $email; 

    /** 
    * @Assert\NotBlank(
    *  message="not.blank", 
    *  groups={"Default", "login"} 
    *) 
    */ 
    public $password; 
} 

Si j'ajoute un paramètre comme celui-ci, il se plaint:

$errors = $validator->validate($entity, 'login'); 

Mais il doit y avoir un moyen de le faire, n'est-ce pas?

+0

Je pense que vous devez définir vos groupes de validation dans security.yml ou validation.yml – Nickolaus

Répondre

1

En fait, la bonne façon d'utiliser des groupes de validation Symfony3 est de les énumérer comme un tableau:

$errors = $validator->validate($entity, null, ['login']); 

BTW, selon votre cas d'utilisation, vous ne pourriez pas besoin de définir Default groupe pour chaque propriété et utiliser juste groupe Login au lieu de login. Ensuite, lorsque vous validez l'entité avec le groupe Default, elle inclura automatiquement des assertions avec un nom de groupe égal au nom de classe qui est Login dans votre cas. Pour plus de détails, voir: http://symfony.com/doc/current/validation/groups.html

0

Après avoir creusé dans le code de Symfony j'ai trouvé ce qui suit:

fichier: /vendor/symfony/symfony/src/Symfony/Component/Validator/Validator/ValidatorInterface.php

ligne: publique function validate ($ value, $ contraintes = null, $ groups = null);

Donc, si je change ceci:

$errors = $validator->validate($entity, 'login'); 

à ceci:

$errors = $validator->validate($entity, null, 'login'); 

Il fonctionne!