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] Création de son propre utilisateur


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut [FOSUserBundle] Création de son propre utilisateur
    Bonjour à tous !

    J'ai posté hier pour une question a peu pres similaire sur le même bundle, mais là, le problème n'est plus le même !

    En fait, j'ai un utilisateur dans mon application qui hérite bien de User du FOSUserBundle.

    Le problème est que quand je fais un update sur ma base, il m'ajoute tous les champs du FOSUserBundle à mon utilisateur. Jusque là s'est tout à fait normal, mais j'aimerai ne pas utiliser tous les attributs de ce bundle (comme email_canonical, username_canonical, enable...) Comment puis je faire pour les enlever ?

    Quand je génère mon formulaire de cette façon :
    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
     
    public function buildForm(FormBuilder $builder, array $options)
        {
            //Ajouter un label perso :  'label' => 'nomDuLabel'
            $builder
                ->add('username', 'text')
                ->add('username_canonical', 'text')
                ->add('email', 'text')
                ->add('email_canonical', 'text')
                ->add('password', 'password')
                ->add('name', 'text')
                ->add('surname', 'text')
                ->add('dateBirth', 'date')
                ->add('phone', 'text')
                ->add('civility','choice', array(
                    'choices' => array('m' => 'Homme', 'f' => 'Femme')))
                ->add('nationnality', new NationnalityType)
                ->add('school', new SchoolType)
                ->add('language', 'collection', array('type'    => new LanguageType,
                                                    'prototype' => true,
                                                    'allow_add' => true))
                ->add('description', 'text')
                ->add('interest', new InterestType);
        }
    et que je ne mets pas les attributs de FOSUserBundle comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                ->add('username_canonical', 'text')
    cela plante, et me dit qu'il sont requis. Mais je n'en veux pas !

    Merci de votre future réponse artiste du web.


    Sylvain

  2. #2
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Soit tu ne les veux vraiment pas en base et dans ce cas, il n'y a pas d'autre solution que de recréer ton propre modèle user à partir de celui créé par le FOS, soit tu ne veux juste pas te préoccuper de ces champs et dans ce cas, une solution simple consiste à créer des setters par défaut dans ton entité User, ce que j'ai fait.

    Par exemple dans ton entité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function setEmail($email)
        {
            $this->email = $email;
            $this->setUsername($email);
            return $this;
        }
    J'espère répondre à ta question.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par KzrData Voir le message
    Soit tu ne les veux vraiment pas en base et dans ce cas, il n'y a pas d'autre solution que de recréer ton propre modèle user à partir de celui créé par le FOS, soit tu ne veux juste pas te préoccuper de ces champs et dans ce cas, une solution simple consiste à créer des setters par défaut dans ton entité User, ce que j'ai fait.

    Par exemple dans ton entité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function setEmail($email)
        {
            $this->email = $email;
            $this->setUsername($email);
            return $this;
        }
    J'espère répondre à ta question.
    Merci de ta réponse,

    Je viens de tester ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        /**
         * Set usernameCanonical
         *
         * @param string $usernameCanonical
         */
        public function setUsernameCanonical($usernameCanonical)
        {
            $this->usernameCanonical = "test";
        }
    Erreur : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username_canonical' cannot be null. J'ai fait un clean cache avant, et je ne l'ai pas fait apparaître dans le Formulaire.

    ça m'énerver

  4. #4
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Il me semble que pour correctement redéfinir la méthode de la classe mère, la méthode de la classe fille doit aussi posséder le même retour.
    Soit ajouter le return $this à ta méthode.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par KzrData Voir le message
    Il me semble que pour correctement redéfinir la méthode de la classe mère, la méthode de la classe fille doit aussi posséder le même retour.
    Soit ajouter le return $this à ta méthode.
    Je viens d'essayer, et ça ne fonctionne pas. Un return $this; dans un setter me parait tout de même très bizarre !

  6. #6
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    Comment tu enregistre ton utilisateur dans ta base de donnée ?

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Avrel Voir le message
    Comment tu enregistre ton utilisateur dans ta base de donnée ?
    En utilisant un UserHandler.php dans lequel j'ai la méthode :
    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
     
        public function onSuccess(User $user)
        {
            $this->em->persist($user->getCivility());
            $this->em->persist($user->getSchool()->getAssociation());
            $this->em->persist($user->getSchool()->getDiplomaLevel());
            $this->em->persist($user->getSchool());
            $this->em->persist($user->getInterest());
            foreach($user->getLanguage() as $langue)  
            {
                $this->em->persist($langue);
                $this->em->persist($langue->getLevelLanguage());
            }
            $this->em->persist($user->getNationnality());
            $this->em->persist($user);
            $this->em->flush();
        }

  8. #8
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    Bon ok,

    FOSUserBundle utilise un manager pour la gestion des utilisateurs donc pour persister l'utilisateur tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->get('fos_user.user_manager')->updateUser($user);
    En utilisant ce manager tous tes champs "cannonical" seront mis a jour automatiquement, donc pas besoin de les mettre dans ton formulaire.

    Ton formulaire devrait ressembler a ca :

    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
     
    public function buildForm(FormBuilder $builder, array $options)
        {
            //Ajouter un label perso :  'label' => 'nomDuLabel'
            $builder
                ->add('username', 'text')
                ->add('email', 'text')
                ->add('plainPassword', 'password')
                ->add('name', 'text')
                ->add('surname', 'text')
                ->add('dateBirth', 'date')
                ->add('phone', 'text')
                ->add('civility','choice', array(
                    'choices' => array('m' => 'Homme', 'f' => 'Femme')))
                ->add('nationnality', new NationnalityType)
                ->add('school', new SchoolType)
                ->add('language', 'collection', array('type'    => new LanguageType,
                                                    'prototype' => true,
                                                    'allow_add' => true))
                ->add('description', 'text')
                ->add('interest', new InterestType);
        }
    Note bien également que j'ai modifié password par plainPassword , en effet si tu utilise password il sera enregistré en clair dans ta base de donnée et ensuite (en plus de ne pas être sécurisé du tout) tu ne pourras pas te connecter. Le manager s’occupera d'hasher ton password.

  9. #9
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    PS : Doctrine te permet de persister ne cascade pour eviter d'avoir a persister chaque relation entre tes entités :

    Voir ici => http://doctrine-orm.readthedocs.org/...ade-operations

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Avrel Voir le message
    PS : Doctrine te permet de persister ne cascade pour eviter d'avoir a persister chaque relation entre tes entités :

    Voir ici => http://doctrine-orm.readthedocs.org/...ade-operations
    Tu veux dire que je n'ai qu'a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       public function onSuccess(User $user)
        {
            $this->get('fos_user.user_manager')->updateUser($user);
            $this->em->flush();
        }
    C'est bien cela ? Je regarde ton truc merci

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    J'ai cette erreur :
    ( ! ) Fatal error: Call to undefined method mySite\UserBundle\Form\UserHandler::get() in C:\wamp\www\mySite\src\mySite\UserBundle\Form\UserHandler.php on line 41

    Il me semble que ma classe doit étendre quelque chose mais je ne sais pas quoi étendre !

    Dans ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class UserHandler 
    {  
    ...
        public function onSuccess(User $user)
        {        
            $this->get('fos_user.user_manager')->updateUser($user);
            $this->em->flush();
        }

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Bon je vais mettre un peu plus de code pour que l'on comprenne bien :

    J'ai ma méthode ajouter dans mon UserController.php :

    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
       public function addAction()
        {
            $user = new User();
            $form = $this->createForm(new UserType, $user);
     
            $formHandler = new UserHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
     
            if($formHandler->process())
            {
                return $this->redirect( $this->generateUrl('mySiteUser_see', 
                        array('id' => $user->getId())) );
            }
            return $this->render('mySiteUserBundle:User:add.html.twig', 
                                 array('form' => $form->createView(),
                                ));
        }
    Ensutie j'ai mon UserHandler comme ça :

    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
    48
    class UserHandler 
    {   
        protected $form;
        protected $request;
        protected $em;
     
        public function __construct(Form $form, Request $request, EntityManager $em)
        {
            $this->form    = $form;
            $this->request = $request;
            $this->em      = $em;
        }
     
        public function process()
        {
            if( $this->request->getMethod() == 'POST' )
            {
                $this->form->bindRequest($this->request);
     
                if( $this->form->isValid() )
                {
                   $this->onSuccess($this->form->getData());
     
                    return true;
                }
            }
            return false;
        }
     
        public function onSuccess(User $user)
        {
            /*
            var_dump($user);
            $this->em->persist($user->getCivility());
            $this->em->persist($user->getSchool()->getAssociation());
            $this->em->persist($user->getSchool()->getDiplomaLevel());
            $this->em->persist($user->getSchool());
            $this->em->persist($user->getInterest());
            foreach($user->getLanguage() as $langue)  
            {
                $this->em->persist($langue);
                $this->em->persist($langue->getLevelLanguage());
            }
            $this->em->persist($user->getNationnality());
            $this->em->persist($user);*/
                $this->get('fos_user.user_manager')->updateUser($user);
                $this->em->flush();
            }

    Mon user comme ceci :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    <?php
     
    namespace mySite\UserBundle\Entity;
    use Doctrine\Common\Collections\ArrayCollection;
    use FOS\UserBundle\Entity\User as BaseUser;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * mySite\UserBundle\Entity\User
     */
    class User extends BaseUser
    {
        /**
         * @var integer $id
         * 
         * @ORM\Column(name="id", type="integer", nullable=true)
         */
        protected $id;
     
        /**
         * @var string $name
         * 
         * @ORM\Column(name="name", type="string", nullable=true)
         */
        private $name;
     
        /**
         * @var string $surname
         * 
         * @ORM\Column(name="surname", type="string", nullable=true)
         */
        private $surname;
     
        /**
         * @var date $dateBirth
         * 
         * @ORM\Column(name="dateBirth", type="DateTime", nullable=true)
         */
        private $dateBirth;
     
        /**
         * @var string $phone
         * 
         * @ORM\Column(name="phone", type="string", nullable=true)
         */
        private $phone;
     
        /**
         * @var Civility $civility
         * 
         * @ORM\Column(name="civility", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\Civility")
         */
        private $civility;
     
        /**
         * @var Nationnality $nationnality
         * 
         * @ORM\Column(name="nationnality", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\Nationnality")
         */
        private $nationnality;
     
     
        /**
         * @var School $school
         * 
         * @ORM\Column(name="school", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\School")
         */
        private $school;
     
        /**
         * @var Language $language
         * 
         * @ORM\Column(name="language", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\Language")
         */
        private $language;
     
        /**
         * @var string $description
         * 
         * @ORM\Column(name="description", type="string", nullable=true)
         */
        private $description;
     
        /**
         * @var integer $interest
         * 
         * @ORM\Column(name="interest", type="integer", nullable=true)
         * @ORM\OneToMany(targetEntity="mySite\UserBundle\Entity\Interest")
         */
        private $interest;
     
        /**
         * @var integer $lodgement
         * 
         * @ORM\Column(name="lodgement", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\Lodgement")
         */
        private $lodgement;
     
        /**
         * @var integer $photo
         * 
         * @ORM\Column(name="photo", type="integer", nullable=true)
         * @ORM\OneToMany(targetEntity="mySite\UserBundle\Entity\UserPhoto")
         */
        private $photo;
     
        /**
         * @var integer $address
         * 
         * @ORM\Column(name="address", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="mySite\UserBundle\Entity\Address")
         */
        private $address;
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set name
         *
         * @param string $name
         */
        public function setName($name)
        {
            $this->name = $name;
        }
     
        /**
         * Get name
         *
         * @return string 
         */
        public function getName()
        {
            return $this->name;
        }
     
        /**
         * Set surname
         *
         * @param string $surname
         */
        public function setSurname($surname)
        {
            $this->surname = $surname;
        }
     
        /**
         * Get surname
         *
         * @return string 
         */
        public function getSurname()
        {
            return $this->surname;
        }
     
        /**
         * Set dateBirth
         *
         * @param date $dateBirth
         */
        public function setDateBirth($dateBirth)
        {
            $this->dateBirth = $dateBirth;
        }
     
        /**
         * Get dateBirth
         *
         * @return date 
         */
        public function getDateBirth()
        {
            return $this->dateBirth;
        }
     
        /**
         * Set phone
         *
         * @param string $phone
         */
        public function setPhone($phone)
        {
            $this->phone = $phone;
        }
     
        /**
         * Get phone
         *
         * @return string 
         */
        public function getPhone()
        {
            return $this->phone;
        }
     
        /**
         * Set civility
         *
         * @param Civility $civility
         */
        public function setCivility(Civility $civility)
        {
            $this->civility = $civility;
        }
     
        /**
         * Get civility
         *
         * @return Civility 
         */
        public function getCivility()
        {
            return $this->civility;
        }
     
        /**
         * Set nationnality
         *
         * @param Nationnality $nationnality
         */
        public function setNationnality(Nationnality $nationnality)
        {
            $this->nationnality = $nationnality;
        }
     
        /**
         * Get nationnality
         *
         * @return Nationnality 
         */
        public function getNationnality()
        {
            return $this->nationnality;
        }
     
        /**
         * Set school
         *
         * @param School $school
         */
        public function setSchool(School $school)
        {
            $this->school = $school;
        }
     
        /**
         * Get school
         *
         * @return School 
         */
        public function getSchool()
        {
            return $this->school;
        }
     
        /**
         * Set language
         *
         * @param Language $language
         */
        public function setLanguage(Language $language)
        {
            $this->language = $language;
        }
     
        /**
         * Get language
         *
         * @return Language 
         */
        public function getLanguage()
        {
            return $this->language;
        }
     
        /**
         * Set description
         *
         * @param string $description
         */
        public function setDescription($description)
        {
            $this->description = $description;
        }
     
        /**
         * Get description
         *
         * @return string 
         */
        public function getDescription()
        {
            return $this->description;
        }
     
        /**
         * Set interest
         *
         * @param Interest $interest
         */
        public function setInterest(Interest $interest)
        {
            $this->interest = $interest;
        }
     
        /**
         * Get interest
         *
         * @return Interest 
         */
        public function getInterest()
        {
            return $this->interest;
        }
     
        /**
         * Set lodgement
         *
         * @param Lodgement $lodgement
         */
        public function setLodgement(Lodgement $lodgement)
        {
            $this->lodgement = $lodgement;
        }
     
        /**
         * Get lodgement
         *
         * @return Lodgement 
         */
        public function getLodgement()
        {
            return $this->lodgement;
        }
     
        /**
         * Set photo
         *
         * @param UserPhoto $photo
         */
        public function setPhoto(UserPhoto $photo)
        {
            $this->photo = $photo;
        }
     
        /**
         * Get photo
         *
         * @return UserPhoto 
         */
        public function getPhoto()
        {
            return $this->photo;
        }
     
        /**
         * Set address
         *
         * @param integer $address
         */
        public function setAddress($address)
        {
            $this->address = $address;
        }
     
        /**
         * Get address
         *
         * @return integer 
         */
        public function getAddress()
        {
            return $this->address;
        }
     
     
        public function __toString()
        {
            return $this->name;
        }
    }
    Alors j'ai changer quelque chose, déjà j'ai fait hériter mon User du FOSUserBundle, mais maintenant j'ai une erreur a cause de l'email :

    MappingException: Duplicate definition of column 'email' on entity 'mySite\UserBundle\Entity\User' in a field or discriminator column mapping.

    Donc mes questions sont :

    Comment je fais pour ne plus avoir l'erreur avec l'email ?

    Et ensuite, comment je fais pour persister mon user et ses entités qui lui sont rattaché ?

    J'avais très bien réussi à le faire avant d'utiliser le FOSUserBundle, les entités étaient bien persistées etc. Mais je n'avais pas toute la puissance du bundle de FOS bien sur.

    Merci de votre aide.

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Ok premier problème résolu.

    J'hérité de l'entity et non du model pour mon baseUser. donc je n'ai plus la duplication d'email.

    Par contre j'ai toujours un problème avec la persistance des données :

    ( ! ) Fatal error: Call to undefined method mySite\UserBundle\Form\UserHandler::get() in C:\wamp\www\mySite\src\mySite\UserBundle\Form\UserHandler.php on line 55

    Il faut que j'hérite mon UserHandler de quelque chose pour avoir le get... Mais quoi !

    Je vous fais un rapport dans quelque temps si je trouver.

    merci !

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    J'ai changé mon code, je n'ai plus de controller, vu que FOSBundle fournis pas mal de méthode en fait,

    Donc maintenant je n'ai plus que mon entité user qui hérite du model user de FOSUserBundle.

    J'ai récupérer le fichier register.html.twig du bundle pour pouvoir essayer de faire app_dev.php/register. Voilà ce qu'il me met maintenant :

    Fatal error: Call to undefined method Symfony\Bundle\DoctrineBundle\Registry::getManager() in C:\wamp\www\mySite\app\cache\dev\appDevDebugProjectContainer.php on line 1021

    On m'a dit que s'était pas galère symfony2...

  15. #15
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    Il faut que tu définisse ton UserHandler comme un service et que lui injecte le fos_user.user_manager.

    En gros :

    dans services.xml tu ajoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <service id="acme_user.user_handler" class="Acme/AcmeUserBundle/Handler/UserHandler" >
                <argument type="service" id="fos_user.user_manager" />
    </service>
    Dans ton userHandler tu ajoutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     protected $userManager;
     public function __construct( UserManagerInterface $userManager)
        {
            $this->userManager = $userManager;
        }
    Ensuite pour l'utiliser tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->userManager->updateUser($user);
    Et dans le controller ou tu appelle ton userHandler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->get('acme_user.user_handler')->process();
    Bien sur tu adapte çà à ton application.

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Bon j'ai décidé de complètement refaire mon bundle. Parce que j'avais trop d'ânerie de tout les cotés

    Donc j'ai tout refais mais j'ai une erreur comme ceci :

    MappingException: Class monSite\UserBundle\Entity\User is not a valid entity or mapped super class.

    Je ne la comprends pas trop cette erreur puisque mon utilisateur est tout de même très simple :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    <?php
     
    namespace monSite\UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use FOS\UserBundle\Entity\User as BaseUser;
     
    /**
     * monSite\UserBundle\Entity\User
     *
     * @ORM\Table(name="user")
     * @ORM\Entity
     */
    class User extends BaseUser
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        protected $id;
     
        /**
         * @var string $name
         * 
         * @ORM\Column(name="name", type="string", nullable=true)
         */
        private $name;
     
        /**
         * @var string $surname
         * 
         * @ORM\Column(name="surname", type="string", nullable=true)
         */
        private $surname;
     
        /**
         * @var date $dateBirth
         * 
         * @ORM\Column(name="date_birth", type="date", nullable=true)
         */
        private $dateBirth;
     
        /**
         * @var string $phone
         * 
         * @ORM\Column(name="phone", type="string", nullable=true)
         */
        private $phone;
     
        /**
         * @var integer $civility
         * 
         * @ORM\Column(name="civility", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="monSite\UserBundle\Entity\Civility")
         */
        private $civility;
     
        /**
         * @var integer $nationnality
         * 
         * @ORM\Column(name="nationnality", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="monSite\UserBundle\Entity\Nationnality")
         */
        private $nationnality;
     
        /**
         * @var integer $school
         * 
         * @ORM\Column(name="school", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="monSite\UserBundle\Entity\School")
         */
        private $school;
     
        /**
         * @var integer $language
         * 
         * @ORM\Column(name="language", type="integer", nullable=true)
         * @ORM\OneToMany(targetEntity="monSite\UserBundle\Entity\Language")
         */
        private $language;
     
        /**
         * @var string $description
         */
        private $description;
     
        /**
         * @var integer $interest
         * 
         * @ORM\Column(name="interest", type="integer", nullable=true)
         * @ORM\OneToMany(targetEntity="monSite\UserBundle\Entity\Interest")
         */
        private $interest;
     
        /**
         * @var integer $lodgement
         * 
         * @ORM\Column(name="lodgement", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="monSite\UserBundle\Entity\Lodgement")
         */
        private $lodgement;
     
        /**
         * @var integer $photo
         * 
         * @ORM\Column(name="photo", type="integer", nullable=true)
         * @ORM\OneToMany(targetEntity="monSite\UserBundle\Entity\UserPhoto")
         */
        private $photo;
     
        /**
         * @var integer $address
         * 
         * @ORM\Column(name="address", type="integer", nullable=true)
         * @ORM\OneToOne(targetEntity="monSite\UserBundle\Entity\Address")
         */
        private $address;
     
        /**
         * Set name
         *
         * @param string $name
         */
        public function setName($name)
        {
            $this->name = $name;
        }
     
        /**
         * Get name
         *
         * @return string 
         */
        public function getName()
        {
            return $this->name;
        }
     
        /**
         * Set surname
         *
         * @param string $surname
         */
        public function setSurname($surname)
        {
            $this->surname = $surname;
        }
     
        /**
         * Get surname
         *
         * @return string 
         */
        public function getSurname()
        {
            return $this->surname;
        }
     
        /**
         * Set dateBirth
         *
         * @param date $dateBirth
         */
        public function setDateBirth($dateBirth)
        {
            $this->dateBirth = $dateBirth;
        }
     
        /**
         * Get dateBirth
         *
         * @return date 
         */
        public function getDateBirth()
        {
            return $this->dateBirth;
        }
     
        /**
         * Set phone
         *
         * @param string $phone
         */
        public function setPhone($phone)
        {
            $this->phone = $phone;
        }
     
        /**
         * Get phone
         *
         * @return string 
         */
        public function getPhone()
        {
            return $this->phone;
        }
     
        /**
         * Set civility
         *
         * @param Civility $civility
         */
        public function setCivility(Civility $civility)
        {
            $this->civility = $civility;
        }
     
        /**
         * Get civility
         *
         * @return Civility 
         */
        public function getCivility()
        {
            return $this->civility;
        }
     
        /**
         * Set nationnality
         *
         * @param Nationnality $nationnality
         */
        public function setNationnality(Nationnality $nationnality)
        {
            $this->nationnality = $nationnality;
        }
     
        /**
         * Get nationnality
         *
         * @return Nationnality 
         */
        public function getNationnality()
        {
            return $this->nationnality;
        }
     
        /**
         * Set school
         *
         * @param School $school
         */
        public function setSchool(School $school)
        {
            $this->school = $school;
        }
     
        /**
         * Get school
         *
         * @return School 
         */
        public function getSchool()
        {
            return $this->school;
        }
     
        /**
         * Set language
         *
         * @param Language $language
         */
        public function setLanguage(Language $language)
        {
            $this->language = $language;
        }
     
        /**
         * Get language
         *
         * @return Language 
         */
        public function getLanguage()
        {
            return $this->language;
        }
     
        /**
         * Set description
         *
         * @param string $description
         */
        public function setDescription($description)
        {
            $this->description = $description;
        }
     
        /**
         * Get description
         *
         * @return string 
         */
        public function getDescription()
        {
            return $this->description;
        }
     
        /**
         * Set interest
         *
         * @param Interest $interest
         */
        public function setInterest(Interest $interest)
        {
            $this->interest = $interest;
        }
     
        /**
         * Get interest
         *
         * @return Interest 
         */
        public function getInterest()
        {
            return $this->interest;
        }
     
        /**
         * Set lodgement
         *
         * @param Lodgement $lodgement
         */
        public function setLodgement(Lodgement $lodgement)
        {
            $this->lodgement = $lodgement;
        }
     
        /**
         * Get lodgement
         *
         * @return Lodgement 
         */
        public function getLodgement()
        {
            return $this->lodgement;
        }
     
        /**
         * Set photo
         *
         * @param UserPhoto $photo
         */
        public function setPhoto(UserPhoto $photo)
        {
            $this->photo = $photo;
        }
     
        /**
         * Get photo
         *
         * @return UserPhoto 
         */
        public function getPhoto()
        {
            return $this->photo;
        }
     
        /**
         * Set address
         *
         * @param Address $address
         */
        public function setAddress(Address $address)
        {
            $this->address = $address;
        }
     
        /**
         * Get address
         *
         * @return Address 
         */
        public function getAddress()
        {
            return $this->address;
        }
     
    }
    Dois je hériter de la classe Model/User ou de la classe Entity/User ?

    Merci de votre réponse.

  17. #17
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    T'as bien ajouté ton bundle dans appKernel ?

  18. #18
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Avrel Voir le message
    T'as bien ajouté ton bundle dans appKernel ?
    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
    <?php
     
    use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
     
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
                new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
                new Symfony\Bundle\SecurityBundle\SecurityBundle(),
                new Symfony\Bundle\TwigBundle\TwigBundle(),
                new Symfony\Bundle\MonologBundle\MonologBundle(),
                new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
                new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
                new Symfony\Bundle\AsseticBundle\AsseticBundle(),
                new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
                new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
                new FOS\UserBundle\FOSUserBundle(),
                new monSite\LodgementBundle\monSiteLodgementBundle(),
                new monSite\UserBundle\monSiteUserBundle(),
            );
     
            if (in_array($this->getEnvironment(), array('dev', 'test'))) {
                $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
                $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
                $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
            }
     
            return $bundles;
        }
     
        public function registerContainerConfiguration(LoaderInterface $loader)
        {
            $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
        }
    }
    Oui :'(

  19. #19
    Membre habitué Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Points : 177
    Points
    177
    Par défaut
    Et ton userBundle hérite bien de FOSUserBundle ?

  20. #20
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Avrel Voir le message
    Et ton userBundle hérite bien de FOSUserBundle ?
    Oui aussi :'(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    namespace monSite\UserBundle;
     
    use Symfony\Component\HttpKernel\Bundle\Bundle;
     
    class monSiteUserBundle extends Bundle
    {
        public function getParent()
        {
            return 'FOSUserBundle';
        }
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/10/2011, 15h01
  2. [Kettle PDI] Création de son propre plugin
    Par arno974 dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 20/05/2010, 12h28
  3. Réponses: 5
    Dernier message: 28/04/2009, 13h45
  4. Création de son propre repository
    Par Cooly dans le forum Maven
    Réponses: 1
    Dernier message: 13/03/2007, 19h28
  5. Création de son propre message dans un formulaire
    Par androme dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2005, 00h13

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