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 :
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é.
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 @listener1 ne dépend que de lui même c'est sur le @listerner2
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é.
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 logs de la page montrent que seules 2 dépendances sont injectées mais qu'il en manque une au constructeur du service :
Le code partiel du controller en question :
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 ?: '_'})));
L'argument $api n'étant pas injecté, il prend automatiquement null pour valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public function __construct(EntityManagerInterface $em, TokenStorageInterface $security_token_storage, $api = null) { ...
Je tatonne depuis plusieurs heures sans constater d'avancés.
Vous remerciant par avance pour le temps que vous accorderez à mon problème.
Partager