我正在尝试在我的 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);