Symfony2中的Token_storage没有令牌

时间:2016-06-16 09:12:59

标签: php symfony security login token

在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。

我的目的是获取当前登录用户的用户名。我需要让服务意识到这一点。

1 个答案:

答案 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 }