Php 与Symfony一起使用服务中的会话

Php 与Symfony一起使用服务中的会话,php,session,symfony,Php,Session,Symfony,我想在Symfony的服务中使用我的用户会话 因此,我的控制器中有: $service = $this->container->get('myservice'); $timeline = $service->getThing(); 我需要在函数getting()中检索我的用户会话。 我不想像getThing($session) 我该怎么做呢?您可以将会话注入到您的服务中。容器中的会话密钥是@Session,正如@Igor所说,将会话(和安全上下文)注入控制器(因为它是一个服务

我想在Symfony的服务中使用我的用户会话

因此,我的控制器中有:

$service = $this->container->get('myservice');
$timeline = $service->getThing();
我需要在函数
getting()
中检索我的用户会话。 我不想像
getThing($session)


我该怎么做呢?

您可以将会话注入到您的服务中。容器中的会话密钥是
@Session

,正如@Igor所说,将会话(和安全上下文)注入控制器(因为它是一个服务)

服务.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,在我的服务的构造中检索$session,但是我如何用$this->session检索用户id?您不应该直接从会话中提取用户。而是注入
@security.context
并从令牌获取用户。