这是一个Symfony 3
项目。如何在用户实体中使用Symfony参数
在用户实体中,我需要实现方法getRoles()
。我有一个私人成员$roles
这是一个数组,我将它添加到serialize
和unserialize
方法中。
public function getRoles()
{
if (count($this->roles) == 0) {
$this->roles = { ... read from db ... };
}
return $this->roles;
}
我面临的一个问题是,在... read from db ...
一部分,我不得不使用一些参数从parameters.yml
。通常,$this->container->getParameter(...)
完成这项工作。不幸的是,从一个实体我没有访问该容器。我的问题是:如何从实体访问parameters.yml? 我可以以某种方式注入所需的参数吗?
另一个问题是:我是否需要序列化$roles
以及还是应该在每个请求上读取它们?
---编辑---
这种逻辑在我看来,正确放置。
getRoles()
函数应该获取用户的角色到安全包。它通过查询私有成员和ORM关系来完成它。唯一的问题是我需要确定某些组,因为它们在所有部署中都没有类似的名称。这就是为什么我需要parameters.yml。
这是来自用户实体的片段,它实现了AdvancedUserInterface
。
public function getRoles() {
$ADMIN_GRP = "ADMIN_GROUP"; // I need this from parameters.yml
$SUPPORT_GRP = "SUPPORT_GROUP"; // I need this from parameters.yml
$roles = ['ROLE_USER'];
foreach ($this->memberships as $m) {
if ($m->getGroupId() == $SUPPORT_GRP)
array_push($roles, "ROLE_SUPPORT");
if ($m->getGroupId()) == $ADMIN_GRP)
array_push($roles, "ROLE_ADMIN");
}
return $roles;
}
你不应该把这种逻辑变成实体。改用原则事件。 – malcolm
看来我无法从'LifecycleEventArgs'访问容器。 – user3429660
我的意思是'preUpdate','postUpdate','preLoad'etc ... – malcolm