在Symfony2中,我将@security.token_storage传递给注册为服务的侦听器。我这样做是为了多种服务。
在一种情况下,token_storage没有方法getToken()。我不明白为什么,因为用户已登录,其他服务可以访问它。
我注册了我的服务:
gedmo.listener.loggable:
class: CmdbBundle\Library\Loggable\LoggableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
- [ setUserValue, [ @security.token_storage ] ]
我不知道为什么没有令牌可访问。我的开发栏显示有一种类型的标记:UsernamePasswordToken。
我的目的是获取当前登录用户的用户名。我需要让服务意识到这一点。
答案 0 :(得分:0)
该服务似乎未初始化,您尝试获取令牌时,侦听器中的属性可能为null。 我个人使用构造函数来构造服务,在你的情况下你必须尝试这样。 http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services
因为setter是为可选服务而制作的,在您的情况下,服务似乎是强制性的。
gedmo.listener.loggable:
class: CmdbBundle\Library\Loggable\LoggableListener
arguments:
- '@annotation_reader'
- '@security.token_storage'
tags:
- { name: doctrine.event_subscriber, connection: default }