【问题标题】:Use session in service with Symfony使用 Symfony 服务中的会话
【发布时间】:2014-03-12 10:50:04
【问题描述】:

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

所以,我的控制器中有:

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

我需要在函数getThing() 中检索我的用户会话。 我不想添加像getThing($session)这样的会话

我该怎么做?

【问题讨论】:

    标签: php session symfony


    【解决方案1】:

    正如@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();
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经试过了。我在参数中添加@session,在我的服务构造中检索 $session,但是如何使用 $this->session 检索用户 ID?
      • 您不应该直接从会话中拉出用户。而是注入@security.context 并从令牌中获取用户。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2011-12-27
      • 2017-01-25
      相关资源
      最近更新 更多