IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Form] Validation d'un formulaire [Débutant(e)]


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 206
    Points : 74
    Points
    74
    Par défaut [Form] Validation d'un formulaire
    Bonsoir,

    je travaille sur un petit exemple d'application sur les contraintes. J'ai un petit problème avec mon entité Commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /**
         * @ORM\ManyToMany(targetEntity="Udc\ProduitBundle\Entity\Produit")     
         * @ORM\JoinColumn(nullable=false)
         */
        private $produits;
    avec CommandeEntity :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ->add('produits', 'entity', array(
                      'class' => 'UdcProduitBundle:Produit',
                      'property'=>'libelle',
                      'multiple' => true,
                      'query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('p')->orderBy('p.libelle', 'ASC');},
                      )) ;
    J'aimerais pour $produits qu'il y ait un message pour dire qu'il me faut au moins un produit dans ma liste multiple. Quelqu'un pourrait m'indiquer une piste à suivre?

    Merci beaucoup.

  2. #2
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Un message d'erreur pour ton form une fois validé? Un simple message dans ton form sans vérification ou une véritable contrainte?

    Dans le dernier cas, une contrainte de validation de classe peut-être une bonne solution.
    http://symfony.com/fr/doc/current/co...onstraint.html

  3. #3
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 206
    Points : 74
    Points
    74
    Par défaut
    merci KzrData En fait je voudrais définir une régle de validation directement dans mon objet Commande pour la variable $produits mais le fait de vouloir affichier dans CommandeEntity sous forme d'une liste multiple m'embrouille un peu. Est-ce que je dois le faire en fait sur les attributs de mon objet Produit mais j'en doute vue que dans ma liste de choix multiple j'ai - si j'ai bien compris - un ArrayCollection.

  4. #4
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 206
    Points : 74
    Points
    74
    Par défaut
    Personne pour me donner un coup de main ?

  5. #5
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Regarde le lien que je t'ai donné. Il te suffit d'ajouter une contrainte à ton entité commande. Avec par exemple une fonction validate dans ton validator qui ressemblerait à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function validate($commande, Constraint $constraint) {
            if (count($commande->getProduits())==0){
                $this->context->addViolation($constraint->message);
            }
        }

  6. #6
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 206
    Points : 74
    Points
    74
    Par défaut
    Bonjour et merci pour ta réponse KzrData,

    je suivis ce que tu m'a dit comme suit :

    un répertoire : C:\wamp\www\Symfony2.2\src\Udc\CommandeBundle\Validator\Constraints

    dans lequel j'ai deux fichiers : ContainsListeError.php et ContainsListeErrorValidator.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    namespace Udc\CommandeBundle\Validator\Constraints;
     
    use Symfony\Component\Validator\Constraint;
     
    /**
     * @Annotation
     */
    class ContainsListeError extends Constraint
    {
        public $message = "Vous devez selectionner au moins un élément de la liste.";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
     
    namespace Udc\CommandeBundle\Validator\Constraints;
     
    use Symfony\Component\Validator\Constraint;
    use Symfony\Component\Validator\ConstraintValidator;
     
    class ContainsListeErrorValidator extends ConstraintValidator
    {   
        public function validate($commande, Constraint $constraint) {
            if (count($commande->getProduits())==0){
                $this->context->addViolation($constraint->message);
            }
        }
    }
    avec dans ma classe Commande.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    namespace Udc\CommandeBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
    use Symfony\Component\Validator\Constraints as Assert;
    use Udc\CommandeBundle\Validator\Constraints as UdcAssert;
     
    ...
         /**
         * @ORM\ManyToMany(targetEntity="Udc\ProduitBundle\Entity\Produit")  
         * @UdcAssert\ContainsListeError()
         * @ORM\JoinColumn(nullable=false)
         */
        private $produits;

    et bien lorsque je valide mon formulaire en mode création sans choisir de produit dans ma liste j'ai toujours le premier message erreur par défaut : Ceci est un champ obligatoire. Par contre lorsque je le valide en mode modification
    j'ai le message : Fatal error: Call to undefined method Doctrine\ORM\PersistentCollection::getProduits() in C:\wamp\www\Symfony2.2\src\Udc\CommandeBundle\Validator\Constraints\ContainsListeErrorValidator.php on line 11

    Peux tu me dire où est mon erreur parce que je n'y vois plus clair?

    Merci !!!

  7. #7
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Ta commande ne serait pas aussi une collection appartenant à une autre entité(Client par exemple)?
    Sinon vérifie ce que donne ta variable $commande au moment de son passage dans la fonction validate avec un var_dump($commande).
    Le code que je t'ai donné n'était qu'une indication, à toi de l'adapter à ton projet.

Discussions similaires

  1. [2.x] [Form] Validation de formulaire imbriqué
    Par dukoid dans le forum Symfony
    Réponses: 12
    Dernier message: 02/04/2013, 22h36
  2. [2.x] [Form] Validation de formulaires imbriqués non fonctionnelle
    Par Sokaru dans le forum Symfony
    Réponses: 2
    Dernier message: 17/03/2013, 20h10
  3. [2.x] [Form] Validation des données dans un formulaire ?
    Par kolbek dans le forum Symfony
    Réponses: 4
    Dernier message: 11/09/2012, 12h45
  4. [2.x] [Form] Validation de plusieurs formulaire d'un coup
    Par Ducky93 dans le forum Symfony
    Réponses: 8
    Dernier message: 28/08/2012, 11h39
  5. Réponses: 11
    Dernier message: 16/09/2004, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo