【发布时间】:2014-03-12 10:50:04
【问题描述】:
我想在 Symfony 的服务中使用我的用户会话。
所以,我的控制器中有:
$service = $this->container->get('myservice');
$timeline = $service->getThing();
我需要在函数getThing() 中检索我的用户会话。
我不想添加像getThing($session)这样的会话
我该怎么做?
【问题讨论】:
我想在 Symfony 的服务中使用我的用户会话。
所以,我的控制器中有:
$service = $this->container->get('myservice');
$timeline = $service->getThing();
我需要在函数getThing() 中检索我的用户会话。
我不想添加像getThing($session)这样的会话
我该怎么做?
【问题讨论】:
正如@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();
}
}
【讨论】:
您可以将会话注入您的服务。容器中的会话密钥是@session。
【讨论】:
@security.context 并从令牌中获取用户。