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 :

Ajout champ formulaire [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Ajout champ formulaire
    Bonsoir,

    J'ai un formulaire d'enregistrement d'une adresse qui comporte ces différents champs, chacun basé sur une propriété de l'entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Champs se basant chacun sur une propriété de l'entité 'Adresse'
    $builder
                ->add('rue')
                ->add('numero')
                ->add('boite')
                ->add('localite')
            ;
    J'ai voulu ajouter un champ permettant de filtrer les localités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Champ ne se basant pas sur une propriété de l'entité 'Adresse'
    $builder
                ->add('','entity', array('class'=>'Hotels\GestionAnnoncesBundle\Entity\Province', 'required' => false))
            ;
    En ajoutant ce champ, lors de la tentative d'enregistrement, j'obtiens l'erreur :

    This form should not contain extra fields
    Comment, dans le formulaire, puis-je ajouter un champ n'intervenant pas dans le processus d'enregistrement?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut property_path
    Essayez avec "property_path":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $builder->add('','entity', array( "property_path" => false,'class'=>'Hotels\GestionAnnoncesBundle\Entity\Province', 'required' => false))

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Ajoute le "à la main" dans le twig, sans le nommer avec le préfixe utilisé pour ton Form. Il ne sera pas bindé avec les données du Form principal sur ton entité ou autre objet de données.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci à vous deux pour vos réponses.

    La solution de hazamor ne fonctionne malhaureusement pas, même si elle me plaisait mieux car scindait bien le formulaire du template.

    La solution de pc.bertineau fonctionne correctement, mais je trouve qu'il est dommâge de ne pas avoir de solution en travaillant dans le formulaire et non dans le template.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    L'option "property_path" est utile pour spécifier une autre propriété pour peupler la valeur du champ et binder la valeur entrée sur ton objet data.

    ex : un champ TextField qui s'appellerait "name" mais dont que tu souhaiterais peupler à partir de et binder sur la propriété 'firstName' de ton entité User.

    Il semble que la valeur 'false' empêche le peuplement du champ et le binding sur l'entité. Qu'est-ce que tu avais comme erreur avec la solution de hazamor ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Je suis rassuré, globalement je vois qu'on se pose tous les mêmes questions quand on démarre.

    J'ai la même contrainte, je veux des champs en plus dans un formulaire pour améliorer la saisie mais je ne veux pas les avoir forcement dans l'entité.

    Déjà il y a le cas du mot de passe ou de l'email, il est parfois pas mal de doubler le champ, mais là je pense que SF2 le gere non ? Si oui comment ? On doit bien pouvoir faire comme en JQuery Validation des tests croisés si tel champ = tel valeur alors tel champ = tel valeur.

    Car il y a un cas tout bete, accepter les CGV d'une commande, on a pas forcement envie de créer juste un champ sur l'entité commande non ?

    Merci

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Pour répondre à pc.bertineau (encore merci de ton intérêt), j'avais la même erreur que précédemment, à savoir :

    This form should not contain extra fields

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    @Guldil :

    Dans ces cas-là, je ne mappe pas mon Form sur une entité.

    Je crée mon formulaire avec une classe étendant AbstractType :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
     
    namespace MyCompany\MyBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class RegistrationType extends AbstractType
    {
     
       /**
        * Construit le Form
        * @param FormBuilder $builder
        * @param array       $options
        * @return void
        */
       public function buildForm(FormBuilder $builder, array $options)
       {
          $builder
             ->add('fullname', 'text', array ('label' => 'registration.fullnameLabel'))
             ->add('email', 'text', array ('label' => 'registration.emailLabel'))
             ->add('phoneNumber', 'text', array ('label' => 'registration.telephoneLable'))
             ->add('password', 'password', array ('label' => 'registration.passwordLabel'))
             ->add('passwordConfirm', 'password', array ('label' => 'registration.confirmPasswordLable'))
             ->add('newsletter', 'checkbox', array (
                     'required' => false,
                     'label' => 'registration.newsletter',
                )
             )
             ->add('partnerMail', 'checkbox', array (
                     'required' => false,
                     'label' => 'registration.partnerMail',
                )
             )
             ->add('termsAndConditionApproval1', 'checkbox');
       }
     
       /**
        * Returns the name of this type.
        * @return string The name of this type
        */
       public function getName()
       {
          return 'form_registration';
       }
     
    }
    Et je me crée un objet simple, mappé sur le Form, portant les contraintes de validation :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
     
    namespace MyCompany\MyBundle\Form;
     
    use Symfony\Component\Validator\Constraints as Assert;
     
    class RegistrationConstraints
    {
     
       /**
        * @Assert\NotBlank()
        */
       public $fullname;
       /**
        * @Assert\NotBlank()
        * @Assert\Email()
        */
       public $email;
       /**
        * @Assert\NotBlank()
        * @Assert\Regex(pattern="/^(\+[1-9][0-9][0-9]?)?[0-9]{5,14}$/")
        */
       public $phoneNumber;
       /**
        * @Assert\NotBlank()
        */
       public $password;
       /**
        * @Assert\NotBlank()
        */
       public $passwordConfirm;
       public $newsletter = true;
       public $partnerMail;
       /**
        * @Assert\True(message="must.approve.termsAndCondition")
        */
       public $termsAndConditionApproval1;
     
    }
    Et dans le contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
          //La classe RegistrationConstraints mappe les contraintes des champs de ce formulaire
          $formConstraints = new RegistrationConstraints();
     
          $form = $this->createForm(new RegistrationType(), $formConstraints);
    Et seulement, ensuite, une fois mes form data bindées sur mon objet RegistrationConstraints, je traite mes données en base, idéalement dans un service, sinon dans le contrôleur directement...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Génial j'ai compris

    Je teste ca bientot !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup ca marche nickel avec ta méthode !
    J'ai donc bien un formulaire + compliqué et une classe Utilisateur persistante plus légère

    Et au passage je comprends mieux SF2...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    ?

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Oui, en implémentant dans le twig. Merci beaucoup pour l'aide apportée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Ajout champ formulaire vers autre table
    Par charliee dans le forum Access
    Réponses: 9
    Dernier message: 07/05/2014, 18h20
  2. Ajouter champs formulaire
    Par Jibego dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2014, 17h23
  3. [MySQL] ajouter champs formulaire
    Par doublemetre dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 04/02/2012, 11h57
  4. Ajout champ formulaire après menu déroulant
    Par Waka56 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/06/2011, 14h31
  5. [1.x] Ajout champs formulaire
    Par babyboy6492 dans le forum Symfony
    Réponses: 8
    Dernier message: 11/12/2010, 18h46

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