2016-06-16 3 views
0

Symfony2では、@ security.token_storageをサービスとして登録されているリスナーに渡します。私は複数のサービスのためにこれを行います。Symfony2の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 ] ] 

アクセスなしトークンが存在しない理由を私は知りません。私のdevバーは、UsernamePasswordTokenという種類のトークンがあることを示しています。

私が意図しているのは、現在ログインしているユーザーのユーザー名を取得することです。サービスにそのことを認識させる必要があります。

+0

setUserValueでgetTokenを呼び出していますか?そうであればタイミング問題です。リスナー自身は、セキュリティスタッフがそれを行う前に作成されます。リスナーが実際にイベントを受け取ったときにgetTokenを呼び出します。 – Cerad

答えて

0

サービスは初期化されていないように見えます。トークンを取得しようとすると、リスナーの属性がおそらくnullになっている可能性があります。 私は個人的にサービスを構築するためにコンストラクタを使用していますが、あなたもこのようにしなければなりません。 http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services

セッターはオプションのサービス用に作られているため、あなたのケースではサービスは必須と思われます。

gedmo.listener.loggable: 
    class: CmdbBundle\Library\Loggable\LoggableListener 
    arguments: 
     - '@annotation_reader' 
     - '@security.token_storage' 
    tags: 
     - { name: doctrine.event_subscriber, connection: default } 
関連する問題