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 :

[FOSUserBundle] Personnalisation de la fiche d'inscription


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 52
    Points
    52
    Par défaut [FOSUserBundle] Personnalisation de la fiche d'inscription
    Bonjour,

    Je rencontre un problème lors de la personnalisation de la fiche d'inscription pour un nouvel utilisateur.

    Je n'arrive pas à avoir les labels comme je les veux mais vois les labels générés par FOSUserBundle.
    Par exemple, pour mes check buttons : fos_user_registration_form_howDidYouHear_1fos_user_registration_form_howDidYouHear_2fos_user_registration_form_howDidYouHear_3fos_user_registration_form_howDidYouHear_4fos_user_registration_form_howDidYouHear_5fos_user_registration_form_howDidYouHear_6fos_user_registration_form_howDidYouHear_7fos_user_registration_form_howDidYouHear_8

    Pourtant dans mon formType je précise bien les labels :

    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
        public function buildForm(FormBuilder $builder, array $options)
        {
            // add your custom field
            $builder
                ->add('email', 'email')
                ->add('plainPassword', 'repeated', array('type' => 'password'))
                ->add('name')
                ->add('familyName', null, array(
                    'label' => 'Birthday:',
                ))
                ->add('birthdate', 'birthday', array(
                    'label' => 'Birthday:',
                ))
                ->add('city', null, array(
                    'label' => 'City:',
                ))
                ->add('sex','choice', array(
                    'choices' => array(1 => 'Male', 2 => 'Female'),
                    'label' => 'Gender',
                    ))
                ->add('howDidYouHear','choice', array(
                    'choices' => array(
                        1 => 'Friend (verbally)',
                        2 => 'Friend (by email or text)',
                        3 => 'Received a Quilly poem',
                        4 => 'Internet news',
                        5 => 'Internet search',
                        6 => 'Internet ad',
                        7 => 'Paper and Ink press',
                        8 => 'Other'
                        ),
                    'label' => 'How did you hear about The Poet ?',
                    'expanded' => true,
                    'multiple' => false,
                    ));
        }
    J'écrase aussi le fichier register_content.html.twig fourni avec le bundle, qui gère la présentation de la form. J'ai beau préciser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            {{ form_label(form.familyName, 'Family Name') }}
            {{ form_errors(form.familyName) }}
            {{ form_widget(form.familyName) }}
    Ce code n'est pas non plus pris en compte..

    Au final, je me retrouve à coder ma form en html dans mon fichier twig afin d'avoir des labels corrects...

    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
        <div>
            <label for="fos_user_registration_form_city">City:</label>
            {{ form_errors(form.city) }}
            {{ form_widget(form.city) }}
        </div>
        <div>
            <label for="fos_user_registration_form_sex">Sex:</label>
            {{ form_errors(form.sex) }}
            {{ form_widget(form.sex) }}
        </div>
        <div>
            <label for="fos_user_registration_form_howDidYouHear">How did you hear about The Poet ?</label>
            <br>
            {{ form_errors(form.howDidYouHear) }}
            <input id="fos_user_registration_form_howDidYouHear_1" type="radio" value="1" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_1">Friends (verbally)</label>
            <input id="fos_user_registration_form_howDidYouHear_2" type="radio" value="2" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_2">Friends (by email or text)</label>
            <input id="fos_user_registration_form_howDidYouHear_3" type="radio" value="3" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_3">Received a Quilly poem</label>
            <input id="fos_user_registration_form_howDidYouHear_4" type="radio" value="4" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_4">Internet news</label>
            <input id="fos_user_registration_form_howDidYouHear_5" type="radio" value="5" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_5">Internet search</label>
            <input id="fos_user_registration_form_howDidYouHear_6" type="radio" value="6" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_6">Internet ad</label>
            <input id="fos_user_registration_form_howDidYouHear_7" type="radio" value="7" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_7">Paper and Ink press</label>
            <input id="fos_user_registration_form_howDidYouHear_8" type="radio" value="8" required="required" name="fos_user_registration_form[howDidYouHear]">
            <label for="fos_user_registration_form_howDidYouHear_8">Other</label>
        </div>
    Mais ça m'embête car je ne peux plus mettre le {{ form_rest(form) }}

    Avez vous une idée d'où le problème peut venir ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Je ne sait pas trop comment ca fonctionne, mais j'ai l'impression qu'à partir du moment ou il existe des traductions, le reste des consignes est ignoré.

    Pour ma part, j'ai contourné le problème en mettant toutes ces valeurs de label dans les fichiers de traduction.
    Ces fichiers devront se situer dans app/resources/translations.
    J'ai copié les fichiers de base du bundle, et j'y ai ajouté mes propres valeurs de label.

  3. #3
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Puisque je vois que tu es sur le même type de sujet que moi, j'aurais aimé savoir comment tu as fait pour étendre le formulaire de profil de fos user ?

    Je navigue sur leur documentation depuis quelques heures et je ne trouve que de la m***e dans les divers tutoriels sur le net...
    (a chaque fois, on se contente d'utiliser gentiment ce qui existe, sans penser à montrer comment ajouter un champs bidon en plus...)

    Bref, j'ai un UtilisateurBundle, qui contient un repertoire Form.
    Dans celui ci, je créé UserType.

    J'ai ce code dans
    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
     
    <?php
     
    namespace JaiUneIdee\UtilisateurBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class UserType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('email')
                ->add('password')
                ->add('signature')
            ;
        }
    }
    2 soucis :
    - je ne sais pas du tout comment savoir quel nom lui donner, ou comment dire a symfony que je veux utiliser ce formulaire là...
    - est il possible d'étendre directement le parent, une fois qu'on le trouve (un peu comme layout)?(dailleur, comment on fait pour le trouver a part en se balladant au petit bonheur la chance dans le dossier de fos user ?)

    Merci,
    Pierre

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    J'avoue qu'overrider un bundle, quand on découvre, c'est vraiment formateur, en 3 jours, j'ai du bloquer au moins 5 heures sur des soucis avec ce bundle :p

    Déjà en entête du form que tu étends, ajoute ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use FOS\UserBundle\Form\Type\ProfileFormType as BaseType;
    Cela indique que tu utilile le Form ProfileFormType du bundle de base FOSUser, que tu vas ici nommer BaseType (pour faire plus court).

    Dans ton fichier, tu peut même overrider la méthode getName comme ceci (le nom retourné devant être unique dans ton projet):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public function getName()
        {
            return 'JaiUneIdee_utilisateurrbundle_usertype';
        }
    J'avoue pas mal galérer avec ce bundle, n'hésitez pas à me corriger (on ne sait jamais).

  5. #5
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Merci,

    Ce ne fonctionne toujours pas...

    j'ai été modifié le fichier config.yml pour mettre ceci (sur une autre classe... j'ai travaillé en parralele pour suivre un tuto)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fos_user:
        db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
        firewall_name: main
        user_class: JaiUneIdee\UtilisateurBundle\Entity\User
        service:
            mailer: fos_user.mailer.twig_swift
        registration:
          form:
            type: JaiUneIdee_UtilisateurBundle_registration
    Et ma classe :
    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
     
     
    <?php
     
    namespace JaiUneIdee\UtilisateurBundle\Form\Type;
     
    use Symfony\Component\Form\FormBuilder;
    use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
     
    class RegistrationFormType extends BaseType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            parent::buildForm($builder, $options);
     
            // Ajoutez vos champs ici, revoilà notre champ *signature* :
            $builder->add('signature');
        }
     
        public function getName()
        {
            return 'JaiUneIdee_UtilisateurBundle_registration';
        }
    }
    J'ai essayé pleind e varoiante pour le nom, mais j'ai a chaque fois cette erreur :
    Could not load type "JaiUneIdee_UtilisateurBundle_registration"
    Ca te dis quelque chose ?

    Merci,
    Pierre

  6. #6
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Finalement, un truc qui fonctionne... presque

    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
     
    fos_user:
        db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
        firewall_name: main
        user_class: JaiUneIdee\UtilisateurBundle\Entity\User
        service:
            mailer: fos_user.mailer.twig_swift
        registration:
          form:
            type: jaiuneidee_user_registration
    services: 
        jaiuneidee_user_registration: 
            class: JaiUneIdee\UtilisateurBundle\Form\Type\RegistrationFormType 
            tags: 
                -  { name: form.type }
            argument: %fos_user.model.user.class%
    Avec dans la classe le meme nom bien sur...

    Je passe l'erreur pour rentrer dans une autre...

    Warning: Missing argument 1 for FOS\UserBundle\Form\Type\RegistrationFormType::__construct(), called in /home/pmithrandir/workspace/jaiuneidee/app/cache/dev/appDevDebugProjectContainer.php on line 1133 and defined in /home/pmithrandir/workspace/jaiuneidee/vendor/bundles/FOS/UserBundle/Form/Type/RegistrationFormType.php line 24
    Au passage, si tu as une explication sur ce que j'ai fait, je n'ai aucune idée de pourquoi ca fonctionne...Je n'ai vu cette histoire de services que dans un post perdu sur le net... alors que les tutos n'en parle pas.

    Et je n'ai aucune idée des rarguments que j'ai pu lui passer, qui d'après ce que j'ai vu pourrait être la cause de mon nouveau bug.

    Merci,
    Pierre

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    j'ai le meme probleme que vous can not load GRH_User_registration comment vous avez fait pour corriger ce probleme ,je suis blocquée.

  8. #8
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Il faut ajouter la ligne service pour lui dire ou est le code.

    Cf l'exmple ci dessu(qui a un problème dans l'argument du constructeur je crois)

Discussions similaires

  1. [2.x] [FOSUserBundle] Personnalisation du formulaire d'inscription
    Par EtudiantJ2EE dans le forum Symfony
    Réponses: 2
    Dernier message: 17/04/2013, 16h17
  2. [2.x] [FOSUserBundle] Personnalisation des formulaires
    Par Booyakha dans le forum Symfony
    Réponses: 5
    Dernier message: 14/01/2013, 18h33
  3. [2.x] [FOSUserBundle] Personnaliser les champs de la table User
    Par Dinduks dans le forum Symfony
    Réponses: 4
    Dernier message: 11/07/2012, 16h25
  4. [2.x] [FOSUserBundle]Personnaliser la classe User
    Par MarronSuisse dans le forum Symfony
    Réponses: 3
    Dernier message: 20/03/2012, 08h26
  5. [Forum] Personnalisation de la page d'inscription
    Par roumayne dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 15/10/2007, 12h44

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