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 :

[FOSuser]ajouter des infos à la création d'un utilisateur


Sujet :

Symfony PHP

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

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut [FOSuser]ajouter des infos à la création d'un utilisateur
    Bonjour

    Lors de la création de l'utilisateur, j'aimerais lui attribuer un level par défaut et des dommages qui vont bien avec...

    J'ai tout d'abord voulu le faire dans mon fichier yml, mais on ne peut pas définir de valeur par defaut a ce moiment la, encore moins de clef étrangère.
    J'ai ensuite voulu le faire dans mon entité(constructeur), mais impossible d'appeller une fonction de la BDD pour obtenir le niveau par defaut courant.

    Je vous passe les details, mais j'ai voulu, et essayer sequentiellement de modifier :
    le controller,le form handler, le user manager...

    Il semble que avec le handler on puisse le faire, même si je n'y suis pas arrivé. Même chose avec le usermanager...

    Mais je n'ai jamais réussi a trouver l'endroit ou FOS user conseillait de faire ce genre de modification.
    Comme je ne comprend rien à leur logique, j'aurai été rassuré par un exemple me disant : ok, mettez votre code là, ca ne crééra pas de problème dans le bundle.

    Voici le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $em = $this->getDoctrine()->getEntityManager();
    $user->setDommage($em->getRepository('MonsiteUtilisateurBundle:Dommage')->getUserDefaultDommage());
    Selon vous, ou est ce que je dois faire cette modification ?

    Merci,
    Pierre

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    une possibilité est d'utiliser un listener sur l'evenement prePersist

    http://symfony.com/doc/current/cookb...bscribers.html

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

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    pas bete... ca parait propre.

    Est ce que ca ne surcharge pas inutilement tous les enregistrements ? J'ai cru comprendre que le listener allait être appellé sur les enregistrement de tous les objets...

    Tout ca pour mettre une valeur par defaut, ca commence a devenir complexe non ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Effectivement le listener sera appelé sur tout les persist, et il faudra faire un test sur l'entité pour savoir s'il s'agit d'un User.
    Tout dépend si ton appli fait beaucoup de persist, et si par la suite ce listener ne peux pas être utile dans d'autres entités.
    D'autre part le FOSUserBundle utilise lui-même un listener Doctrine.
    https://github.com/FriendsOfSymfony/...erListener.php

    Sinon redéfinir le formHandler ne parait pas forcément + simple

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

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

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

    J'ai finalement commencé à essayer de faire un listener... Et bien c'est pas simple je trouve(pour changer).


    EDIT : ca fonctionne

    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
     
    <?php
     
    /*
    * This file is part of the FOSUserBundle package.
    *
    * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
    *
    * For the full copyright and license information, please view the LICENSE
    * file that was distributed with this source code.
    */
     
    namespace JaiUneIdee\UtilisateurBundle\Listener;
     
    use Doctrine\Common\EventSubscriber;
    use Doctrine\ORM\Events;
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Doctrine\ORM\Event\PreUpdateEventArgs;
    use FOS\UserBundle\Model\UserInterface;
    use Symfony\Component\DependencyInjection\ContainerInterface;
     
    /**
    * Doctrine ORM listener updating the canonical fields and the password.
    *
    * @author Christophe Coevoet <stof@notk.org>
    */
    class UserListener implements EventSubscriber
    {
        /**
    * @var \FOS\UserBundle\Model\UserManagerInterface
    */
        private $userManager;
     
        /**
    * @var ContainerInterface
    */
        private $container;
        /*
        public function __construct(ContainerInterface $container)
        {
            $this->container = $container;
        }
    	*/
        public function getSubscribedEvents()
        {
            return array(
                Events::prePersist,
            );
        }
     	public function prePersist(LifecycleEventArgs $args)
        {
    		$entity = $args->getEntity();
            if ($entity instanceof UserInterface) {
                if (null === $this->userManager) {
                    //$this->userManager = $this->container->get('fos_user.user_manager');
                    $em = $args->getEntityManager();
                    $dommage = $em->getRepository('JaiUneIdeeUtilisateurBundle:Dommage')->getUserDefaultDommage();
                    $entity->setDommage($dommage);
                }
            }
        }
    }
    Comme tu peux le voir, j'ai desactivé le contructeur et tout ce qui se rapporte au container...parce que je n'ai aps réussi a trouver sur le net une indication sur l'argument a passer dans les lignes services pour avoir un container en parametre.

    Avec ce que je fais, je ne suis pas en train d'écraser un listener par defaut de FosUserBundle ? Est ce qu'il n y aurait pas un moyen de l'étendre par exemple ? Ca serait peut être plus propre ?

    Merci,
    Pierre

Discussions similaires

  1. recherche des info sur création de site
    Par jenny30 dans le forum Droit
    Réponses: 1
    Dernier message: 03/06/2009, 14h32
  2. Réponses: 3
    Dernier message: 02/12/2008, 13h29
  3. Ajouter des infos cron.daily
    Par info_alex dans le forum Administration système
    Réponses: 2
    Dernier message: 24/06/2008, 07h38
  4. comment ajouter des infos projet sur mes JSP
    Par legad dans le forum Maven
    Réponses: 1
    Dernier message: 12/02/2008, 15h45
  5. Réponses: 1
    Dernier message: 23/08/2007, 22h38

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