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 :

3.4.6 - Listener avec paramètre qui ne s'injecte pas [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut 3.4.6 - Listener avec paramètre qui ne s'injecte pas
    Bonjour à tous,

    Je rencontre un problème lorsque les utilisateurs cherchent à réinitialiser le mot de passe.

    J'utilise FOSUserBundle pour gérer les utilisateurs et lorsque le mot de passe est redéfini, j'ai eu besoin de réécrire le listener lié à cet évènement. Ce dernier est défini avec des dépendance comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    user.password.change:
            class: AppBundle\Listeners\PasswordResettingListener
            arguments: ['@router', '@listener1', '@listener2']
            tags:
                - { name: kernel.event_subscriber }
    Le listener ne pose pas de problèmes particulier si ce n'est au niveau de l'injection des dépendances où la toute dernière (la plus importante), celle qui donne les identifiants d'accès aux APIs n'est pas injecté.
    Le @listener1 ne dépend que de lui même c'est sur le @listerner2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    api.rzp:
            class: AppBundle\HTTPRequest\Rezopouce
            arguments: ["@request_stack", '@api.token.listener']
     
    api.token.listener:
            class: AppBundle\Listeners\ApiTokenListener
            arguments: ['@doctrine.orm.entity_manager', '@security.token_storage', '%api%']
            tags:
                - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
    Les services sont bien injectés récurssivement. c'est le tableau '%API%', issu des paramètres (YALM) n'est pas injecté dans ce cas de figure. Par ailleurs, lorsque l'appel du listener se fait lors du traitement des évènements 'kernel.request' le paramètre est alors correctement injecté.

    Les logs de la page montrent que seules 2 dépendances sont injectées mais qu'il en manque une au constructeur du service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->services['AppBundle\Listeners\PasswordResettingListener'] = new \AppBundle\Listeners\PasswordResettingListener(${($_ = isset($this->services['router']) ? $this->services['router'] : $this->getRouterService()) && false ?: '_'}, new \AppBundle\HTTPRequest\Cityway($a), new \AppBundle\HTTPRequest\Listener2(${($_ = isset($this->services['request_stack']) ? $this->services['request_stack'] : $this->services['request_stack'] = new \Symfony\Component\HttpFoundation\RequestStack()) && false ?: '_'}, new \AppBundle\Listeners\ApiTokenListener($a, ${($_ = isset($this->services['security.token_storage']) ? $this->services['security.token_storage'] : $this->services['security.token_storage'] = new \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage()) && false ?: '_'})));
    Le code partiel du controller en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public function __construct(EntityManagerInterface $em, TokenStorageInterface $security_token_storage, $api = null) { ...
    L'argument $api n'étant pas injecté, il prend automatiquement null pour valeur.

    Je tatonne depuis plusieurs heures sans constater d'avancés.

    Vous remerciant par avance pour le temps que vous accorderez à mon problème.

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    Un php app/console debug:container --parameter=api devrait déjà pouvoir t'assurer que ton paramètre est bien pris en compte dans le container et qu'il possède la bonne valeur. Commence déjà par t'assurer de ça, si ce n'est pas le cas, c'est au niveau de la déclaration de ton paramètre que quelque chose cloche.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Merci pour cette réponse pour cette réponse.
    Comme je m'y attendais, la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     bin/console debug:container --parameter=api
    retourne le paramètre correctement. Mon problème se situe exclusivement lors du déclenchement de l'évènement. Pour contourner ce problème j'ai choisi de remplacer la dépendance par le container . C'est un peu lourd mais pour l'instant ça marche à tous les coups.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête avec jointure qui retourne null si pas de valeur
    Par jubourbon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2011, 11h10
  2. Date avec GregorianCalendar qui ne s'affiche pas correctement
    Par glasgow dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 01/07/2009, 11h01
  3. requête avec paramètre qui marche pas
    Par funkyjul dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/04/2008, 13h37
  4. sqldatasource avec paramètre qui vaut null
    Par aurelien.tournier dans le forum ASP.NET
    Réponses: 4
    Dernier message: 17/01/2008, 11h56

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