2014-03-12 61 views
0

我想在Symfony的服務中使用我的用戶會話。與Symfony一起使用會話

所以,我在我的控制器:

$service = $this->container->get('myservice'); 
$timeline = $service->getThing(); 

我需要,在功能getThing(),找回我的用戶會話。 我不想添加會話像getThing($session)

我該怎麼做?

回答

2

正如@Igor所說,注入會話(和安全上下文)到你的控制器(因爲它是一種服務)。

Services.yml

services: 
    my.controller: 
     class: "%mybundle.controller.foo.class%" 
     arguments: [@session, @security.context] 

控制器;

<?php 
use Symfony\Component\HttpFoundation\Session\Session; 

class Foo 
{ 
    private $sessionManager; 

    private $securityContext; 

    public function __construct(Session $session, $security_context) 
    { 
     $this->sessionMananger = $session; 
     $this->securityContext = $security_context; 
    } 

    public function someAction() 
    { 
     $id = $this->getId(); 
    } 

    private function getId() 
    { 
     return $this->securityContext->getToken()->getUser()->getId(); 
    } 
} 
1

您可以將會話注入到您的服務中。會話密鑰在容器中是@session

+0

我已經試過了。我在參數中添加@session,在我的服務構造中檢索$ session,但是如何檢索$ this-> session的用戶ID? –

+2

您不應該直接從會話中拉出用戶。相反,注入'@ security.context'並從令牌獲取用戶。 –