2014-05-21 2 views
1

J'ai une entité de compte qui contient une contrainte de clé étrangère pour une entité utilisateur et une entité client.Validation de l'entité unique

J'essaie de valider l'id du client est numérique et non null. Plus la contrainte unique de user_id et customer_id.

Mon problème la contrainte de classe UniqueEntity est déclenchée quel que soit le résultat du type customer_id: résultat de validation numérique. Qui lance un 500 car la colonne customer_id est un entier.

Ce que je dois faire est, valider le customer_id est un id valide (numérique et non null) avant de vérifier la contrainte unique. Ou y a-t-il un autre moyen d'éviter que symfony/doctrine se rende à la base de données pour tester un identifiant invalide?

Ma config de validation,

MY\ApplicationBundle\Entity\Account: 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
      fields: [ user_id, customer_id ] 
      message: Customer Id already exists for User 
    properties: 
     customer_id: 
      - Type: 
       type: numeric 
       message: Customer Id should be an integer. 
      - NotBlank: 
       message: Customer cannot be blank. 
+0

Je devrais ajouter ceci est un appel d'api, je ne sers pas le formulaire d'un modèle de symfony. L'envoi d'une chaîne comme "test" en tant qu'ID client renvoie ces erreurs sql. Je ne vois pas le point de l'appel supplémentaire db si ce n'est pas nécessaire. Serait bien si vous pouviez définir un arbre de validations dépendantes. – shapeshifter

+0

Je crois que cela pourrait être possible avec des séquences de groupe. Peut-être que cela vous aide: http://symfony.com/doc/current/book/validation.html#group-sequence – Syjin

Répondre

1

Group Sequences devrait résoudre votre problème. Quelque chose comme ça devrait fonctionner:

MY\ApplicationBundle\Entity\Account: 
    group_sequence: 
     - Basic 
     - Account 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
      fields: [ user_id, customer_id ] 
      message: Customer Id already exists for User 
    properties: 
     customer_id: 
      - Type: 
       type: numeric 
       message: Customer Id should be an integer. 
       groups: [Basic] 
      - NotBlank: 
       message: Customer cannot be blank. 
       groups: [Basic] 

Avec des séquences de groupes, vous pouvez définir l'ordre de vos validations. Basic vérifie toutes les contraintes avec le groupe Basic et Account vérifie les autres contraintes pour cette entité.

+0

Si le groupe Basic échoue, le groupe Compte ne fonctionnera pas? – shapeshifter

+0

@shapeshifter oui, voilà comment cela devrait fonctionner – Syjin

+0

Très agréable, fonctionne comme prévu. Cheers mate. – shapeshifter

Questions connexes