Partage
  • Partager sur Facebook
  • Partager sur Twitter

Override du RegistrationFormType de FOSUserBundle

Sous Symfony 3

Sujet résolu
    21 février 2017 à 18:20:35

    Bonjour à tous!

    Voila près de 10 jours que je bug sur ce sujet.

    Mon projet est basé sur Symfony 3 et j'ai installé et configuré FOSUserBundle en version 2, dont hérite mon UserBundle. J'ai ainsi pu créer un utilisateur. Cependant, pour les besoins de mon projet, j'ai surchargé le RegistrationFormType afin de rajouter les champs correspondant aux attributs spécifiques à mon entité User.

    Respectant la structure de FOSUser:

    <?php
    // src/UserBundle/Form/Type\RegistrationFormType.php
    
    namespace UserBundle\Form\Type;
    
    use Symfony\Component\Form\Extension\Core\Type\EmailType;
    use Symfony\Component\Form\Extension\Core\Type\PasswordType;
    use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Symfony\Component\Form\Extension\Core\Type\TextareaType;
    use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
    use Symfony\Component\Form\Extension\Core\Type\DateType;
    use Symfony\Component\Form\Extension\Core\Type\IntegerType;
    use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
    use Symfony\Bridge\Doctrine\Form\Type\EntityType;
    use UserBundle\Repository\GenderRepository;
    use Symfony\Component\Form\Extension\Core\Type\SubmitType;
    use EventBundle\Entity\Theme;
    
    use Doctrine\ORM\EntityRepository;
    
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\AbstractType;
    
    class RegistrationFormType extends AbstractType
    {
        
        
        /**
         * @var string
         */
        private $class;
    
        /**
         * @param string $class The User class name
         */
        public function __construct($class)
        {
            $this->class = $class;
        }
        
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            parent::buildForm($builder, $options);
            $builder->remove('username');
            
            $builder
                /*->add('email', EmailType::class, array(
                    'label'                 => 'form.email',
                    'translation_domain'    => 'FOSUserBundle'
                ))
                ->add('username', null, array(
                    'label'             => 'form.username',
                    'translation_domain' => 'FOSUserBundle'))
                ->add('plainPassword',      RepeatedType::class, array(
                    'type'              => PasswordType::class,
                    'invalid_message'   => 'Les champs de mot de passe de correspondent pas.',
                    'options'           => array('attr'     => array('class'    => 'password-field')),
                    'first_options'     => array('label'    => 'Mot de passe :'),
                    'second_options'    => array('label'    => 'Confirmer le mot de passe :')
                ))*/
                ->add('name',               TextType::class)
                ->add('nickname',           TextType::class)
                ->add('birthDate',          BirthdayType::class, array(
                    'format'            => 'dd-MM-yyyy',
                    'label'
                ))
                ->add('about_me',           TextareaType::class)
                ->add('childrenNumber',     IntegerType::class)
                ->add('gender',             EntityType::class, array(
                    'class'             => 'UserBundle:Gender',
                    'choice_label'      => 'gender',
                    'multiple'          => false,
                    'expanded'          => true
                ))
                ->add('themes',             EntityType::class, array(
                    'class'             => 'EventBundle\Entity\Theme',
                    'choice_label'      => 'title',
                    'multiple'          => true,
                    'expanded'          => true,
                    'empty_data'        => true
                ))
                ->add('save',               SubmitType::class, array(
                    'label'             => 'Enregistrer'
                ))
            ;
        }
        
        /**
         * {@inheritdoc}
         */
        public function getParent()
        {
            return 'FOS\UserBundle\Form\Type\RegistrationFormType';
        }
        
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'xproject_user_registration';
        }
    }
    

    mon entité User:

    <?php
    
    namespace UserBundle\Entity;
    
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
    
    use FOS\UserBundle\Model\User as BaseUser;
    use Symfony\Component\Validator\Constraints as Assert;
    
    /**
     * User
     *
     * @ORM\Table(name="fos_user")
     * @ORM\Entity(repositoryClass="UserBundle\Repository\UserRepository")
     */
    class User extends BaseUser
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
        
        /**
         * @var string
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        protected $name;
        
         /**
         * @var string
         *
         * @ORM\Column(name="nickname", type="string", length=255)
         */
        protected $nickname;
        
         /**
         * @var \Datetime
         *
         * @ORM\Column(name="birth_date", type="datetime")
         */
        protected $birthDate;
        
        /**
         * @var \Datetime
         *
         * @ORM\Column(name="inscription_date", type="datetime")
         */
        protected $inscriptionDate;
                
        /**
         * @var text
         *
         * @ORM\Column(name="about_me", type="text")
         */
        protected $about_me;
        
        /**
         * @ORM\ManyToOne(targetEntity="UserBundle\Entity\Gender")
         */
        protected $gender;
        
        /**
         * @var boolean
         *
         * @ORM\Column(name="admin", type="boolean")
         */
        protected $admin;
        
        /**
         * @var integer
         *
         * @ORM\Column(name="children_number", type="integer")
         */
        protected $childrenNumber;
        
        /**
         * @ORM\ManyToMany(targetEntity="EventBundle\Entity\Theme", mappedBy="users")
         */
        protected $themes;
        
        /**
         * @ORM\ManyToMany(targetEntity="UserBundle\Entity\User", mappedBy="myFriends")
         */
        //protected $friendsWithMe;
        
        /**
         * @ORM\ManyToMany(targetEntity="UserBundle\Entity\User", inversedBy="friendsWithMe")
         * @ORM\JoinTable(name="friends",
         *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
         *      inverseJoinColumns={@ORM\JoinColumn(name="friend_user_id", referencedColumnName="id")}
         * )
         */
        //protected $myFriends;
        
        /**
         * User constructor
         */
        public function __construct()
        {
            parent::__construct();
            
            $this->enabled = false;
            $this->roles = array();
            $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
            $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
            $this->inscriptionDate = new \Datetime();
        }
        
        /**
         * Set the email
         *
         * @param string $email
         * @return User
         */
        public function setEmail($email)
        {
            return parent::setEmail($email);
        }
        
        /**
         * Set name
         *
         * @param string $name
         *
         * @return User
         */
        public function setName($name)
        {
            $this->name = $name;
    
            return $this;
        }
    
        /**
         * Get name
         *
         * @return string
         */
        public function getName()
        {
            return $this->name;
        }
    
        /**
         * Set nickname
         *
         * @param string $nickname
         *
         * @return User
         */
        public function setNickname($nickname)
        {
            $this->nickname = $nickname;
    
            return $this;
        }
    
        /**
         * Get nickname
         *
         * @return string
         */
        public function getNickname()
        {
            return $this->nickname;
        }
    
        /**
         * Set birthDate
         *
         * @param \datetime $birthDate
         *
         * @return User
         */
        public function setBirthDate(\datetime $birthDate)
        {
            $this->birthDate = $birthDate;
    
            return $this;
        }
    
        /**
         * Get birthDate
         *
         * @return \datetime
         */
        public function getBirthDate()
        {
            return $this->birthDate;
        }
    
        /**
         * Set inscriptionDate
         *
         * @param \datetime $inscriptionDate
         *
         * @return User
         */
        public function setInscriptionDate(\datetime $inscriptionDate)
        {
            $this->inscriptionDate = $inscriptionDate;
    
            return $this;
        }
    
        /**
         * Get inscriptionDate
         *
         * @return \datetime
         */
        public function getInscriptionDate()
        {
            return $this->inscriptionDate;
        }
    
        /**
         * Set aboutMe
         *
         * @param string $aboutMe
         *
         * @return User
         */
        public function setAboutMe($aboutMe)
        {
            $this->about_me = $aboutMe;
    
            return $this;
        }
    
        /**
         * Get aboutMe
         *
         * @return string
         */
        public function getAboutMe()
        {
            return $this->about_me;
        }
    
        /**
         * Set admin
         *
         * @param boolean $admin
         *
         * @return User
         */
        public function setAdmin($admin)
        {
            $this->admin = $admin;
    
            return $this;
        }
    
        /**
         * Get admin
         *
         * @return boolean
         */
        public function getAdmin()
        {
            return $this->admin;
        }
    
        /**
         * Set childrenNumber
         *
         * @param integer $childrenNumber
         *
         * @return User
         */
        public function setChildrenNumber($childrenNumber)
        {
            $this->childrenNumber = $childrenNumber;
    
            return $this;
        }
    
        /**
         * Get childrenNumber
         *
         * @return integer
         */
        public function getChildrenNumber()
        {
            return $this->childrenNumber;
        }
    
        /**
         * Set gender
         *
         * @param \UserBundle\Entity\Gender $gender
         *
         * @return User
         */
        public function setGender(\UserBundle\Entity\Gender $gender = null)
        {
            $this->gender = $gender;
    
            return $this;
        }
    
        /**
         * Get gender
         *
         * @return \UserBundle\Entity\Gender
         */
        public function getGender()
        {
            return $this->gender;
        }
    
        /**
         * Add friendsWithMe
         *
         * @param \UserBundle\Entity\User $friendsWithMe
         *
         * @return User
         */
        /*public function addFriendsWithMe(\UserBundle\Entity\User $friendsWithMe)
        {
            $this->friendsWithMe[] = $friendsWithMe;
    
            return $this;
        }
    
        /**
         * Remove friendsWithMe
         *
         * @param \UserBundle\Entity\User $friendsWithMe
         */
        /*public function removeFriendsWithMe(\UserBundle\Entity\User $friendsWithMe)
        {
            $this->friendsWithMe->removeElement($friendsWithMe);
        }
    
        /**
         * Get friendsWithMe
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        /*public function getFriendsWithMe()
        {
            return $this->friendsWithMe;
        }
    
        /**
         * Add myFriend
         *
         * @param \UserBundle\Entity\User $myFriend
         *
         * @return User
         */
        /*public function addMyFriend(\UserBundle\Entity\User $myFriend)
        {
            $this->myFriends[] = $myFriend;
    
            return $this;
        }
    
        /**
         * Remove myFriend
         *
         * @param \UserBundle\Entity\User $myFriend
         */
        /*public function removeMyFriend(\UserBundle\Entity\User $myFriend)
        {
            $this->myFriends->removeElement($myFriend);
        }
    
        /**
         * Get myFriends
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        /*public function getMyFriends()
        {
            return $this->myFriends;
        }
    
        /**
         * Add theme
         *
         * @param \EventBundle\Entity\Theme $theme
         *
         * @return User
         */
        public function addTheme(\EventBundle\Entity\Theme $theme)
        {
            $this->themes[] = $theme;
    
            return $this;
        }
    
        /**
         * Remove theme
         *
         * @param \EventBundle\Entity\Theme $theme
         */
        public function removeTheme(\EventBundle\Entity\Theme $theme)
        {
            $this->themes->removeElement($theme);
        }
    
        /**
         * Get themes
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        public function getThemes()
        {
            return $this->themes;
        }
    }
    

    Dans UserBundle\Resources\ j'ai créé les fichiers:

    FOSUserBundle\config\validation.xml:

    UserBundle\Entity\User:
        properties:
            name:
                constraints:
                    - NotBlank:
                        message: "Veuillez entrer votre nom s'il vous plait"
                        groups:
                            - Registration
                            - Profile
                    - Length:
                        min: 2
                        minMessage: "Le nom entré est trop court pour être validé"
                        max: 30
                        groups:
                            - Registration
                            - Profile
            
            nickname:
                constraints:
                    - NotBlank:
                        message: "Veuillez entrer votre prénom s'il vous plait"
                        groups:
                            - Registration
                            - Profile
                    - Length:
                        min: 1
                        minMessage: "Votre prénom doit comporter au moins une lettre"
                        max: 30
                        groups:
                            - Registration
                            - Profile
                        
            birthDate:
                constraints:
                    - NotBlank:
                        message: "Veuillez entrer votre date de naissance"
                        groups:
                            - Registration
                            - Profile
                            
                    - Type:
                        DateTime: ~
                        groups:
                            - Registration
                            - Profile
            
            insccriptionDate:
                constraints:
                    - NotBlank:
                        groups:
                            - Registration
                            - Profile
                    - Type:
                        DateTime: ~
                        groups:
                            - Registration
                            - Profile
                        
            about_me:
                constraints:
                    - Type:
                        text: ~
                        groups: 
                            - Registration
                            - Profile
            
            admin:
                constraints:
                    - Type:
                        boolean: ~
                        groups:
                            - Registration
                            - Profile
            
            childrenNumber:
                constraints:
                    - Type:
                        integer: ~
                        groups:
                            - Registration
                            - Profile
                         
                themes:
                    Valid: ~
    
    FOS\UserBundle\Model\User:
        constraints:
            - Symfony\Bridge\Doctrine\Validator\Constaints\UniqueEntity:
                fields: email
                errorPath:  email
                message:    fos_user.email.already_used
                groups:
                    - Registration
                    - Profile
                
        properties:
            #username:
                #constraints:
                    #- NotBlank:
                        #message: fos_user.username.blank
                        #groups: [Registration, Profile]
                    #- Length:
                        #min: 2
                        #minMessage: fos_user.username.short
                        #max: 180
                        #maxMessage: fos_user.username.long
                        #groups: [Registration, Profile]
            email:
                constraints:
                    - NotBlank:
                        message: fos_user.email.blank
                        groups:
                            - Registration
                            - Profile
                    - Length:
                        min: 2
                        minMessage: fos_user.email.short
                        max: 180
                        maxMessage: fos_user.email.long
                        groups:
                            - Registration
                            - Profile
                    - Email:
                        message: fos_user.email.invalid
                        groups:
                            - Registration
                            - Profile
                        
            plainPassword:
                constraints:
                    - NotBlank:
                        message: fos_user.email.blank
                        groups:
                            - Registration
                            - ResetPassword
                            - ChangePassword
                    - Length:
                        min: 2
                        minMessage: fos_user.email.short
                        max: 4096
                        groups:
                            - Registration
                            - Profile
                            - ResetPassword
                            - ChangePassword
    
    FOS\UserBundle\Model\Group:
        properties:
            name:
                constraints:
                    - NotBlank:
                        message: fos_user.group.blank
                        groups:
                            - Registration
                    - Length:
                        min: 2
                        minMessage: fos_user.group.short
                        max: 255
                        maxMessage: fos_user.group.long
                        groups:
                            - Registration

    et FOSUserBundle\config\registration.yml:

    services:
        fos_user.registration.form.factory:
            class:      UserBundle\Form\Factory\FormFactory
            arguments:  ["@form.factory", %xproject_user.registration.form.type%, %xproject_user.registration.form.validation_groups%]
            
        xproject_user_registration.form.type:
            tags:
                name: form.type
                alias: xproject_user_registration
                arguments: {UserBundle\Entity\User}

    Le fichier FOSUserBundle\views\register_content.html.twig pour afficher le formulaire RegistrationFormType:

    {% trans_default_domain 'FOSUserBundle' %}
    
    <div class="well">
        {{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}
        
        {{ form_errors(form) }}
        
        <div class="form-group">
            {{ form_label(form.email, "Email :", {'label_attr': {'class': 'col-sm-2 control-label text-left'}}) }}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {{ form_errors(form.email) }}
    
            <div class="col-sm-5">
                {# Génération de l'input. #}
                {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>
        
        <br/>
    
        {{ form_row(form.plainPassword, {'attr': {'class': 'col-sm-5'}}) }}
        
        <div class="form-group">
            {{ form_label(form.name, "Nom :", {'label_attr': {'class': 'col-sm-2 control-label text-left'}}) }}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {{ form_errors(form.name) }}
    
            <div class="col-sm-5">
                {# Génération de l'input. #}
                {{ form_widget(form.name, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>
        
        <div class="form-group">
            {{ form_label(form.nickname, "Prénom :", {'label_attr': {'class': 'col-sm-2 control-label text-left'}}) }}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {{ form_errors(form.nickname) }}
    
            <div class="col-sm-5">
                {# Génération de l'input. #}
                {{ form_widget(form.nickname, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>
        
        <br/>
        
        <div class="form-group">
            {{ form_label(form.username, "Nom d'utilisateur :", {'label_attr': {'class': 'col-sm-2 control-label text-left'}}) }}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {{ form_errors(form.username) }}
    
            <div class="col-sm-5">
                {# Génération de l'input. #}
                {{ form_widget(form.username, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>
        
        {#<div class="form-group">
            <label class="col-sm-2 control-label required" for="for_user_registration_gender">Genre :</label>
            {#{{ form_label(form.gender, "Genre :", {'label_attr': {'class': 'col-sm-2'}}) }}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {#{{ form_errors(form.gender) }}
    
            <div class="col-sm-5">
                {# Génération de l'input. #}
                {#{{ form_widget(form.gender, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>#}
        
        <div class="form-group">
            <label class="col-sm-2 control-label required">Genre :</label>
            <div class="col-sm-10">
                <div id="fos_user_registration_form_gender">
                    <div class="radio">                                                                         <label class="required"><input type="radio" id="fos_user_registration_form_gender_1" name="fos_user_registration_form[gender]" required="required" value="1" /> Masculin</label>
                    </div>
                    
                    <div class="radio">                                                                         <label class="required"><input type="radio" id="fos_user_registration_form_gender_2" name="fos_user_registration_form[gender]" required="required" value="2" /> Féminin</label>
                    </div>
                </div>
            </div>
        </div>
        <br/>
        
        {{ form_row(form.birthDate, {'label': 'Date de naissance :'}) }}
        
        {#<div class="form-group">#}
            {#{{ form_label(form.city, "Ville :", {'label_attr': {'class': 'col-sm-2 control-label text-left'}}) }}#}
    
            {# Affichage des erreurs pour ce champ précis. #}
            {#{{ form_errors(form.city) }}
    
            <div class="col-sm-10">#}
                {# Génération de l'input. #}
                {#{{ form_widget(form.city, {'attr': {'class': 'form-control'}}) }}
            </div>
        </div>#}
        
        
        
        <h2>Centres d'intérêts :</h2>
        
        {{ form_row(form.themes) }}
    
        <br/>
        
        {{ form_widget(form.save, {'attr': {'class': 'btn btn-primary'}}) }}
    
        {{ form_rest(form) }}
    
        {{ form_end(form) }}
        
    </div>

    Le app\config\services.yml:

    # Learn more about services, parameters and containers at
    # http://symfony.com/doc/current/service_container.html
    parameters:
    #    parameter_name: value
        xproject_user.entity.user.class: UserBundle\Entity\User
    
    services:
    #    service_name:
    #        class: AppBundle\Directory\ClassName
    #        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
        app.form.registration:
            class: UserBundle\Form\Type\RegistrationFormType
            arguments: [%fos_user.model.user.class%]
            tags:
                - { name: form.type, alias: xproject_user_registration }
            
    
        app.form.profile:
            class: UserBundle\Form\Type\ProfileType
            tags:
                - { name: form.type, alias: xproject_user_profile }
    
        #xproject_user.user_manager:
        #    class: UserBundle\Entity\UserManager
        #    parent: fos_user.user_manager.default

    et le app\config\config.yml:

    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: services.yml }
        - { resource: "@EventBundle/Resources/config/services.yml" }
        - { resource: "@UserBundle/Resources/config/services.yml" }
        #- { resource: "@UserBundle/Resources/config/validation.yml" }
        #- { resource: "@UserBundle/Resources/config/registration.yml" }
        #- { resource: "@UserBundle/Resources/config/profile.yml" }
        - { resource: "@CoreBundle/Resources/config/services.yml" }
        #- { resource: "@UserBundle/Resources/FOSUserBundle/config/validation.yml" }
    #    - { resource: "@EventBundle/Resources/config/admin.yml" }
    
    # Put parameters here that don't need to change on each machine where the app is deployed
    # http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
    parameters:
        locale: fr
        
    framework:
        #esi:             ~
        translator:      { fallbacks: ["%locale%"] }
        secret:          "%secret%"
        router:
            resource: "%kernel.root_dir%/config/routing.yml"
            strict_requirements: ~
        form:            ~
        csrf_protection: ~
        validation:      { enable_annotations: true }
        #serializer:      { enable_annotations: true }
        templating:
            engines: ['twig']
        default_locale:  "%locale%"
        trusted_hosts:   ~
        trusted_proxies: ~
        session:
            # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
            handler_id:  session.handler.native_file
            save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
        fragments:       ~
        http_method_override: true
        assets: ~
        php_errors:
            log: true
    
    # Twig Configuration
    twig:
        form_themes:
            - 'bootstrap_3_horizontal_layout.html.twig'
        debug:            "%kernel.debug%"
        strict_variables: "%kernel.debug%"
    
    # Doctrine Configuration
    doctrine:
        dbal:
            driver:   pdo_mysql
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
            # if using pdo_sqlite as your database driver:
            #   1. add the path in parameters.yml
            #     e.g. database_path: "%kernel.root_dir%/data/data.db3"
            #   2. Uncomment database_path in parameters.yml.dist
            #   3. Uncomment next line:
            #     path:     "%database_path%"
    
        orm:
            auto_generate_proxy_classes: "%kernel.debug%"
            naming_strategy: doctrine.orm.naming_strategy.underscore
            auto_mapping: true
    
    # Swiftmailer Configuration
    swiftmailer:
        transport: "%mailer_transport%"
        host:      "%mailer_host%"
        username:  "%mailer_user%"
        password:  "%mailer_password%"
        spool:     { type: memory }
    
    fos_user:
        db_driver:      orm             # Le type de BDD à utiliser, nous utilisons l'ORM Doctrine depuis le début
        firewall_name:  main            # Le nom du firewall derrière lequel on utilisera ces utilisateurs
        user_class:     UserBundle\Entity\User # La classe de l'entité User que nous utilisons
        registration:
            form:
                type: UserBundle\Form\Type\RegistrationFormType
        profile:
            form:
                type: UserBundle\Form\Type\ProfileType
        from_email:
            address: webmaster@xproject.fr
            sender_name: webmaster
        
        #service:
            #user_manager: xproject_user.user_manager
    
    #sonata_block:
    #    default_contexts: [cms]
    #    blocks:
    #        # enable the SonataAdminBundle block
    #        sonata.admin.block.admin_list:
    #            contexts: [admin]
    

    Quant à mon message d'erreur:
    le Log:

    Logs  -

    1 error
    1. INFO - Matched route "fos_user_registration_register".
    2. INFO - Populated the TokenStorage with an anonymous Token.
    3. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
    4. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
    5. DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    6. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
    7. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
    8. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
    9. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
    10. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    11. DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
    12. DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
    13. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
    14. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
    15. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
    16. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
    17. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
    18. DEBUG - SELECT t0.id AS id_1, t0.name AS name_2 FROM category t0
    19. DEBUG - SELECT t0.id AS id_1, t0.title AS title_2, t0.description AS description_3, t0.category_name AS category_name_4, t0.category_id AS category_id_5 FROM theme t0
    20. CRITICAL - Uncaught PHP Exception Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: "The option "0" does not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "choice_translation_domain", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "days", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "format", "html5", "inherit_data", "input", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "model_timezone", "months", "placeholder", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups", "view_timezone", "widget", "years"." at C:\xampp\htdocs\xproject\vendor\symfony\symfony\src\Symfony\Component\OptionsResolver\OptionsResolver.php line 685
    21. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
    22. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
    23. DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    24. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
    25. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
    26. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
    27. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
    28. DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    29. DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
    30. DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
    31. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
    32. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
    33. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
    34. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
    35. DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".

    La Stack Trace:

    Stack Trace

    1. invendor\symfony\symfony\src\Symfony\Component\OptionsResolver\OptionsResolver.php at line 685-
      1. ksort($clone->defined);
      2. ksort($diff);
      3.             throw new UndefinedOptionsException(sprintf(
      4.                 (count($diff) > 'The options "%s" do not exist.' 'The option "%s" does not exist.').' Defined options are: "%s".',
      5. implode('", "'array_keys($diff)),
      6. implode('", "'array_keys($clone->defined))
    2. atOptionsResolver ->resolve (array('format' => 'dd-MM-yyyy', 'label'))
      invendor\symfony\symfony\src\Symfony\Component\Form\ResolvedFormType.php at line 95+
    3. atResolvedFormType ->createBuilder (object(FormFactory), 'birthDate',array('format' => 'dd-MM-yyyy', 'label'))
      invendor\symfony\symfony\src\Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy.php at line 81+
    4. atResolvedTypeDataCollectorProxy ->createBuilder (object(FormFactory), 'birthDate',array('format' => 'dd-MM-yyyy', 'label'))
      invendor\symfony\symfony\src\Symfony\Component\Form\FormFactory.php at line 85+
    5. atFormFactory ->createNamedBuilder ('birthDate',object(ResolvedTypeDataCollectorProxy),null,array('format' => 'dd-MM-yyyy', 'label'))
      invendor\symfony\symfony\src\Symfony\Component\Form\FormBuilder.php at line 106+
    6. atFormBuilder ->create ('birthDate', 'Symfony\\Component\\Form\\Extension\\Core\\Type\\BirthdayType',array('format' => 'dd-MM-yyyy', 'label'))
      invendor\symfony\symfony\src\Symfony\Component\Form\FormBuilder.php at line 269+
    7. atFormBuilder ->resolveChildren ()
      invendor\symfony\symfony\src\Symfony\Component\Form\FormBuilder.php at line 215+
    8. atFormBuilder ->getForm ()
      invendor\symfony\symfony\src\Symfony\Component\Form\FormFactory.php at line 47+
    9. atFormFactory ->createNamed ('fos_user_registration_form', 'UserBundle\\Form\\Type\\RegistrationFormType',null,array('validation_groups' =>array('Registration', 'Default')))
      invendor\friendsofsymfony\user-bundle\Form\Factory\FormFactory.php at line 61+
    10. atFormFactory ->createForm ()
      insrc\UserBundle\Controller\RegistrationController.php at line 55+
    11. atRegistrationController ->registerAction (object(Request))
    12. atcall_user_func_array (array(object(RegistrationController), 'registerAction'),array(object(Request)))
      invar\cache\dev\classes.php at line 4216+
    13. atHttpKernel ->handleRaw (object(Request), 1)
      invar\cache\dev\classes.php at line 4171+
    14. atHttpKernel ->handle (object(Request), 1,true)
      invendor\symfony\symfony\src\Symfony\Component\HttpKernel\Kernel.php at line 168+
    15. atKernel ->handle (object(Request))
      inweb\app_dev.php at line 28+

    J'ai plusieurs idées, comme de surcharger le UserManager, ou le FormFactory, ou le form handler, mais je m'y perds. Je crois que des informations, des options, ne sont pas transmises, ou pas valables pour le builder du formulaire surchargé... Quelqu'un peut-il m'aider svp? surtout, quelqu'un comprend-t-il le problème? - Merci

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2017 à 18:46:39

      Hello, peux tu faire plutot un printscreen de tes logs, car là c'est illisible :)

      • Partager sur Facebook
      • Partager sur Twitter

      Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)

        21 février 2017 à 19:36:41

        Merci pour ta réponse! c'est vrai! ^^ :D, je fais ça tout de suite

        -
        Edité par zarakeye 21 février 2017 à 20:40:54

        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2017 à 22:03:58

          Je vais encore t'embeter, mais sur le coup la partie la plus intéressante est en haut :p

          Bon heureusement j'ai retrouvé l'info dans les logs :p

          CRITICAL - Uncaught PHP Exception Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: "The option "0" does not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "choice_translation_domain", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "days", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "format", "html5", "inherit_data", "input", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "model_timezone", "months", "placeholder", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups", "view_timezone", "widget", "years"." at C:\xampp\htdocs\xproject\vendor\symfony\symfony\src\Symfony\Component\OptionsResolver\OptionsResolver.php line 685


          Ton soucis est tout bête, une petite erreur d'étourderie de ta part, dans ton formType, tu as une erreur ici :

          ->add('birthDate',          BirthdayType::class, array(
                          'format'            => 'dd-MM-yyyy',
                          'label'
                      ))

          En effet, tu as mis label sans rien, il traduit donc ton tableau de la manière suivante :

          [

             'format' => 'dd-MM-yyyy',

            0 => 'label'

          ]

          Ce qui pose le soucis :) Donc vire le label ou rempli le :)

          • Partager sur Facebook
          • Partager sur Twitter

          Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)

            23 février 2017 à 3:26:08

            Tu as fais ce que j'ai mis dans le précédent message? ça ta résolu ton soucis?
            • Partager sur Facebook
            • Partager sur Twitter

            Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)

              23 février 2017 à 6:51:45

              Hello! Merci, @Pepsy, pour ton coup de main! C'était bien ça le problème!

              Maintenant, à force de bidouiller, j'ai un problème d'affichage. L'héritage de template ne s'effectue plus. Je vais chercher un peu par moi-même et si je ne m'en sors pas, j'exposerai le problème.

              Faudra-t-il créer un autre sujet? Parce que ce n'est plus exactement le même problème! Le sujet actuel peut-il être considéré comme résolu? Je n'ai pas trop l'habitude d'en créer sur les forums... -Merci encore énormément! c'est fou ce à côté de quoi on peut passer, la tête dans le guidon!!:p

              • Partager sur Facebook
              • Partager sur Twitter
                23 février 2017 à 14:41:20

                Hello,

                Parfait alors :)

                Tu peux mettre se projet en résolu oui, ensuite tu fais un autre Sujet pour ton second problème. Mets bien l'arborescence de tes fichiers dans le nouveau sujet, car ça sera utile sur le coup ;)

                Bonne journée

                • Partager sur Facebook
                • Partager sur Twitter

                Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)

                  23 février 2017 à 14:48:48

                  ça marche! merci encore!! ^^ Bonne journée à toi aussi!
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Override du RegistrationFormType de 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