2017-03-08 19 views
0

我試圖讓我寫的監聽器中的當前登錄用戶(在symfony2中工作,但不在Symfony 3.2.2中)。監聽doctrine.event_listener:onFlush,security.token_storage總是爲空

我的問題是,security.token_storage-> getToken()始終爲空。

我發現的是提示securityListener可能不會被執行此點;所以我沒有令牌 - >因此沒有用戶。

因此,這是服務聲明(service.xml中)

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

這裏是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(); 
} 

編輯

令牌將聽者的第二個呼叫後填寫;第一次迭代沒有數據;所以對我來說沒問題。

回答

0

您可以將其設置爲另一個事件中的私有變量,如prePersist和/或preUpdate,然後訪問onFlush

以這種方式在偵聽器中設置的成員應持續任何請求的持續時間。

+0

thx的提示!我試了一下,檢查了令牌,但沒有成功;但在聽者的第二次調用(不知何故以後)令牌被填充:)我認爲解決方案是不使用die()並檢查以後的迭代:]。到目前爲止,數據並不存在,因此令牌第二次可用並滿足我的需求。謝謝! –