Symfony 获取实体存储库类内的会话变量


Symfony get session variable inside of entity repository class

我正在尝试在我的 Symfony2 实体存储库类中获取一个会话变量,但不太确定如何完成此任务。

基本上我只是这样做:

$this->get('session')->set('cart_id', $cartId);

有人可以指出我正确的方向吗?谢谢。

这不是你想做的事情。它闻起来很糟糕的设计。应创建一个读取会话变量并将其设置为实体的服务。

你不应该在 EntityRepository 中做这样的事情。您将在控制器或服务中执行此操作。您可以通过将实体存储库声明为服务来实现它,如下所示:

parameters:
    entity.sample_entity: "AppBundle:SampleEntity"
services:
    sample_entity_repository:
        class: AppBundle'Repository'SampleEntityRepository
        factory: ["@doctrine", getRepository]
        arguments:
            - %entity.sample_entity%
        calls:
          - [setSession, ["@session"]]

您可以在存储库类中创建如下所示的 setSession 方法:

class SampleRepository extends EntityRepository
{
   private $entity;
   private $session;
   public function __construct(SampleEntity $entity)
   {
      $this->entity = $entity;
   }
   public function setSession(Session $session)
   {
      $this->session = $session;
   }
   .....
}

然后在另一个函数中设置会话变量,如 $this->session->set('cart_id', $cartId);