2014-08-27 15 views
1

我在我的項目中使用Symfony服務配置器在其實例化後配置服務(Docs), 在Configure方法中我需要當前用戶登錄,所以我注入容器我試圖獲得令牌形式Security.context服務,但我總是NULL。 我也嘗試在我的配置器結構中只注入Security.context,但我得到了相同的結果。Symfony服務配置器:getToken with security.context爲NULL

任何想法請致電

謝謝。

 
class MyConfigurator 
{ 
    private $container; 

    public function __construct(ContainerInterface $container) 
    { 
     $this->container = $container; 
    } 


    public function configure() 
    { 
     $user = $this->container->get('security.context')->getToken(); 
     var_dump($user); // = NULL 
    } 
} 
+0

您是否登錄? – 2014-08-27 11:16:28

+0

@ skowron-line是的我登錄 – 2014-08-27 11:59:56

+0

檢查http://stackoverflow.com/questions/11167979/authentication-token-always-null-in-kernel-request-event-in-symfony-2?rq=1到看看它是否有幫助 – 2014-08-27 22:11:26

回答

1

我通過從會話獲取UserId並從數據庫中獲取當前用戶來解決此問題。

UserId先前由我的項目中的AuthenticationListener設置。 所以我修改我的配置結構是這樣的:

 
    /** 
    * @param EntityManager $em 
    * @param Session $session 
    */ 
    public function __construct(EntityManager $em, Session $session) 
    { 
     $this->em = $em; 
     $this->session = $session; 
    } 
0

一個更好的辦法應該是:

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; 

class MyConfigurator 
{ 
    private $tokenStorage; 

    public function __construct(EntityManager $em, TokenStorage $tokenStorage) 
    { 
     $this->em = $em; 
     $this->tokenStorage= $tokenStorage; 
    } 

    public function configure() 
    { 
     $user = $this->tokenStorage->getToken()->getUser(); 
    } 

    ....