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 :

injection d'erreurs sur un champ


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut injection d'erreurs sur un champ
    Bonjour, comment je peux injecter mes erreurs personnalisées dans un champ (hors annotation)?

    $form->addError(new FormError($mess)) permet d'ajout une erreurs générales...
    mais comment faire pour ajouter l'erreur sur mon champ company_name.

    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
            $store = new Store;
            $formBuilder = $this->createFormBuilder($store);
            $formBuilder
                    ->add('company_name')
                    ->...
            $form = $formBuilder->getForm();
     
            if($request->getMethod() == "POST") {
                $form->bindRequest($request);
     
                //injection d'erreurs générales
                $form->addError(new FormError('Nom de magazin interdit'));
     
                //injection d'erreurs sur le champ company_name
                //??????? <-------------------------------------------------------
    merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi tu veux pas mettre dans une annotation (dans la validator en général)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    car j'ai un certain nombres de requêtes a exécuter pour pouvoir valider ma donnée, donc on oublie les annotations.

    Lors d'une validation avancée on a forcement besoin d'injecter les erreurs dans le système.

    qq à une indication ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    si tu veux faire un validation qui ne rentre pas dans les Constraints, cree en une
    qu'est ce que t'appelles "avancé"

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    oui effectivement, mais bon vu que l'a sa devient très compliquer pour pas grand chose.

    je préfère injecter mon erreur directement, d'ailleurs je ne comprend pas pk il ne l'indique pas dans la doc.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    créer la contrainte est ce qui a de plus simple

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    d'accord,

    mais comment on fait pour récupérer le $em dans la class

    class NewValidator extends ConstraintValidator

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    parce que t'as une contrainte par rapport a une entitié ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    oui!!! (j'ai compris comment fonctionne les contraint et je les utilise)

    mais... j'ai un message d'erreur sur un champ qui doit changer selon ou il se trouve dans mon formulaire imbriqué:
    soit: l'adresse de livraison est incomplète
    soit: l'adresse de facturation est incomplète

    ... et pourtant s'est le même champ dans un formulaire où les 2 adresses sont interrogés.

    Comment fait-on pour faire des injections d'erreurs sur un champ en particulier directement dans ma class StoreHandler ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    je me répond à moi même:

    Dans un XXXXXType (avant):

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                    ->add('company_name', 'text', array('label' => 'Nom de votre entreprise:'))
                    ->add('tva_number', 'number', array('label' => 'Numéro tva:', 'invalid_message' => 'Numéro de tva non numérique'))
                    ->add('username', 'text', array('label' => 'Nom d\'utilisateur:'))
                    ->add('password', 'password', array('label' => 'Mot de passe:'))
                    ->add('email', 'email', array('label' => 'Adresse e-mail:'))
                    ->add('addresss', 'collection', array(
                        'type' => new AddressType,
                        'allow_add' => false
                    ))
                    ->addValidator(new CallbackValidator(array($this, 'isOk')));
        }
     
        public function isOk(FormInterface $form)
        {
            $validator_min_lenght = new MinLengthValidator;
     
            $company_name = $form->get('company_name');
            $isValid = $validator->isValid($company_name->getData(), new MinLength(2));
            if(!$isValid) {
                $company_name->addError(new FormError("Erreur")));
            }
        }
    Et dans un XXXXXHandler (apres):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public function process(User $user)
        {
            if($this->request->getMethod() == 'POST') {
     
                //preparation des données
                $this->form->bindRequest($this->request);
     
                $form_address_livraison = $this->form['addresss'][0]['zip_code'];
                //...
                $form_address_livraison->addError(new FormError('Le code postal livraison est invalide');
     
                $form_address_facturation = $this->form['addresss'][1]['zip_code'];
                //...
                $form_address_facturation->addError(new FormError('Le code postal facturation est invalide');

    Good:
    - sa surcharge moins les entity
    - les erreurs sont centralisés dans 2 fichiers et personnalisables.
    - c propre.
    - et surtout les gens moins expert dans mon équipe en symfony2 comprendront tout de suite car le code n'est pas assisté et moins factoriser à mort, sinon c le bordel.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    adresse n'est pas dans une entité ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    si si, mais j'ai une contrainte avec une case à cocher pour dire que l'adresse de livraison et la même que celle de facturation, donc si la 2eme est coché elle se copira sur la 1ere (et n'est plus obligatoire à la saisi).

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pas besoin de faire de collection alors

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    l'entite adresse est une manytomany, plusieurs adresses sont possibles pour la facturation comme pour la livraison.
    on peut en ajouter d'autre dans le compte du client.

Discussions similaires

  1. [AC-2010] Erreur sur un champ indépendant de formulaire
    Par Daejung dans le forum IHM
    Réponses: 8
    Dernier message: 12/12/2011, 23h13
  2. [VxiR2] Erreur sur un champ #Syntaxe
    Par coolmek dans le forum Deski
    Réponses: 1
    Dernier message: 09/05/2011, 14h41
  3. Erreur sur un champ calculé
    Par cyberbase dans le forum Access
    Réponses: 2
    Dernier message: 01/07/2010, 14h54
  4. erreur sur un champ date
    Par tarmo57 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/01/2009, 13h50
  5. [WD8] Erreur sur le champ table
    Par momobulle dans le forum WinDev
    Réponses: 18
    Dernier message: 25/09/2007, 15h11

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