2017-03-08 7 views
0

私が書いたリスナーに現在ログインしているユーザーを取得しようとしています(symfony2では動作しますが、Symfony 3.2.2では動作しません)。リスナーdoctrine.event_listener:onFlush、security.token_storage always null

私の問題は、security.token_storage-> getToken()が常にnullであることです。

私が見つけたのは、この時点でsecurityListenerが実行されない可能性があるというヒントでした。だから私はトークンを取得しない - >したがって、ユーザーはありません。

だから、これはサービス宣言(service.xmlに)

acme.history_logging_listener: 
    class: Acme\EventListener\HistoryLoggingListener 
    arguments: 
     - "@service_container" 
     - "@security.token_storage" 
    tags: 
     - { name: doctrine.event_listener, event: onFlush } 

であり、ここでトークンは、リスナーの2回目の呼び出しの後に入力されます

Classcode

public function __construct(ContainerInterface $oContainer, TokenStorageInterface $oTokenStorage) 
{ 
    $this->_oTokenStorage = $oTokenStorage; 
} 

public function onFlush(OnFlushEventArgs $eventArgs) 
{ 
    \dump($this->_oTokenStorage->getToken()); // should contain a value (not null) 
    die(); 
} 

EDITです。最初の反復にはデータがありません。だから私のために大丈夫です。

答えて

0

prePersistpreUpdateなどの別のイベントのプライベート変数として設定してからonFlushにアクセスできますか?

このようにリスナーに設定されたメンバーは、要求の期間中存続する必要があります。

+0

ヒントのためのthx!私はそれを試して、トークンを確認したが、成功しなかった。リスナーの2回目の呼び出し(何とか後で)トークンが埋まっていた:)私は解決策がdie()を使用せず、その後の反復をチェックすることだと思う。現時点までのデータは存在していないため、トークンは2回目に利用可能で、私のニーズに対応します。 THX! –