Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony2] remplacer template FOSUserBundle

Comment faire pour override page register, avec mise en page perso ?

Sujet résolu
    11 mars 2013 à 18:05:21

    Bonjour,

    Je débute en Symfony2, mais ça vient tranquillement grâce aux tutos (merci !). J'en suis à la partie gestion des users => j'ai installé FOSUserBundle.

    J'ai réussi à surcharger pour que les formulaires FOS s'intègrent dans mon site (bandeau + footer + CSS).

    1) je n'arrive pas à "remplacer" (ou enrichir) le formulaire d'enregistrement (/register) pour ajouter tous mes champs persos de mon UserBundle dans le formulaire FOS. J'ai suivi la doc du tuto et vérifié sur la doc de FOS mais j'obtiens une erreur : Could not load type "vbo_user_registration" in C:\wamp2\www\Symfony217\vendor\symfony\symfony\src\Symfony\Component\Form\FormRegistry.php at line 95

    2) Et de toutes façons, les docs que j'ai lues ne permettent apparemment que de surcharger le formulaire, mais pas de revoir la mise en page (surcharger le template). Et je ne trouve pas le template dans le bundle FOS...

    Quelqu'un aurait-il une petite doc à me conseiller ? Un exemple pour enrichir son user avec plusieurs champs persos et refaire la mise en page ?

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      11 mars 2013 à 18:22:54

      Au cas où, le code :

      C:\wamp2\www\Symfony217\src\Vbo\UserBundle\Resources\config\services.yml

      services:
          vbo_user.registration.form.type:
              class: Vbo\UserBundle\Form\Type\RegistrationFormType
              arguments: [%fos_user.model.user.class%]
              tags:
                  - { name: form.type, alias: vbo_user_registration }

      C:\wamp2\www\Symfony217\app\config\config.yml

      fos_user:
          db_driver:     orm
          firewall_name: main
          user_class:    Vbo\UserBundle\Entity\User
          registration:
              form:
                  type: vbo_user_registration

      C:\wamp2\www\Symfony217\src\Vbo\UserBundle\Form\Type\RegistrationFormType.php

      <?php
      
      namespace Vbo\UserBundle\Form\Type;
      
      use Symfony\Component\Form\FormBuilderInterface;
      use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
      
      class RegistrationFormType extends BaseType
      {
          public function buildForm(FormBuilderInterface $builder, array $options)
          {
              parent::buildForm($builder, $options);
      
              // add your custom field
              //$builder->add('tel');
          }
      
          public function getName()
          {
              return 'vbo_user_registration';
          }
      }



      • Partager sur Facebook
      • Partager sur Twitter
        11 mars 2013 à 18:32:27

        Salut,

        Comment est-ce que tu as cherché la vue du formulaire ? Parce que c'est difficile de faire plus simple pour la trouver : https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Registration/register_content.html.twig

        • Partager sur Facebook
        • Partager sur Twitter
          11 mars 2013 à 21:17:14

          Salut Winzou (oh, grand maître du tuto ;) merci à toi, il est vraiment très bien fait !),

          Pour répondre à ta question, je suis allé voir tout bêtement dans le répertoire vendor, j'ai cherché le bundle FOS, et les views associées. J'ai effectivement trouvé : C:\wamp2\www\Symfony217\vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Resources\views\Registration\register.html.twig qui inclut la vue register_content.html.twig.

          J'avais ouvert ce fichier et comme je n'avais vu aucun tag <input...> j'en ai déduit (trop vite !) que je ne pourrai pas le modifier comme j'ai fait pour la page de login, et j'ai alors commencé à chercher comment enrichir le formulaire.

          Mais je viens de me rappeler (grâce à ta réponse qui m'a fait re-regarder le fichier de plus près) que c'est le {{ form_widget(form) }} dans cette vue qui va générer automatiquement les champs du formulaire (comme indiqué dans ton tuto, avec la méthode pour personnaliser l'affichage des champs). Je m'en vais de ce pas relire cette étape pour voir si cela suffit de remplacer le template FOS par le mien.

          Si au passage tu as un conseil sur la méthode à suivre, je suis preneur ;)

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            18 octobre 2013 à 10:48:47

            Bonjour, un petit up car je bloque au même endroit

            Même fichier, même erreur.

            • Partager sur Facebook
            • Partager sur Twitter
              18 octobre 2013 à 16:01:22

              Je bloque pas pour le template mais pour l'ajout d'une colonne dans le form de register

              -
              Edité par KLeMiX 18 octobre 2013 à 16:02:20

              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2014 à 2:55:54

                salut  

                le sujet est marque résolu mais je ne voix pas la solution

                  je bloque aussi au même endroit "l'ajout d'une colonne dans le  form de register"

                comment tu as fait STP

                MERCIIII

                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2014 à 11:31:24

                  Salut, Pour pouvoir faire ça, il faut étendre ce formulaire:

                  https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Form/Type/RegistrationFormType.php

                  Voici la doc pour faire ça:

                  https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

                  Ensuite il faudra aussi étendre le controller pour faire appel à ton nouveau formulaire.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
                    14 mai 2014 à 19:20:28

                    salut

                    en fait j'ai suivie le 2eme lien sur github mais en ce qui concerne le controller comment dois je le changer ???

                    MERCII

                    -
                    Edité par sisi2013 14 mai 2014 à 19:23:43

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mai 2014 à 9:29:03

                      En le surchargeant aussi.

                      https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md

                      PS: Je te conseille fortement de lire la doc du bundle quand tu en utilises un, même si Winzou en parlant dans son tuto, il ne dit pas tout et d'ailleurs il recommande lui aussi de lire la doc pour l'utiliser.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
                        15 mai 2014 à 23:59:25

                        Merci KenshiWado

                        j'ai tout fait comme dans la doc

                        *********services.yml

                        fos_user:

                            db_driver: orm 

                            firewall_name: main

                            user_class: Mon\UserBundle\Entity\User

                            registration:

                                form:

                                    type: mon_user_registration


                        *******RegistrationFormType

                        <?php


                        namespace Mon\UserBundle\Form\Type;


                        use Symfony\Component\Form\FormBuilderInterface;

                        use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;


                        class RegistrationFormType extends BaseType

                        {

                            public function buildForm(FormBuilderInterface $builder, array $options)

                            {

                                parent::buildForm($builder, $options);


                                // add your custom field

                                $builder->add('name');

                            }


                            public function getName()

                            {

                                return 'mon_user_registration';

                            }

                        }

                        mais j'ai l'erreur suivante:

                        Could not load type "mon_user_registration"

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 mai 2014 à 8:44:33

                          Est-ce que tu l'as défini le service "mon_user_registration"

                          Si oui, montre moi le fichier yml ou xml qui définit ton service, puis le fichier Ton/UserBundle/DependencyInjection/TonUserBundleExtension. Et si tu penses avoir bien déclaré ton service, essaye juste de vider le cache.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
                            16 mai 2014 à 17:28:05

                            MERCII KenshiWado 

                            -
                            Edité par sisi2013 18 mai 2014 à 23:46:58

                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 mars 2016 à 9:44:34

                              Voici un autre lien où on montre comment personnaliser le formulaire.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              The quieter you are, the more you can hear!

                              [Symfony2] remplacer template FOSUserBundle

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown