这是一个Symfony 3
项目。
在用户实体中,我需要实现方法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。
这是来自User实体的片段,它实现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;
}
答案 0 :(得分:0)
为什么不向您的会员实体添加组标签?所以你可以......
public function getRoles() {
$roles = ['ROLE_USER'];
foreach ($this->memberships as $m) {
if ($m->getGroupRole() == 'ROLE_SUPPORT')
array_push($roles, "ROLE_SUPPORT");
if ($m->getGroupRole()) == 'ROLE_ADMIN')
array_push($roles, "ROLE_ADMIN");
}
return $roles;
}
答案 1 :(得分:0)
正如malcolm所说,你不应该从实体内部触及EntityManager,逻辑 NOT 正确放置。
另外,您不应该从实体内部读取parameters.yml
(你 COULD )
use Symfony\Component\Yaml\Yaml;
$value = Yaml::parse(file_get_contents('/path/to/file.yml'));
但您确实 SHOULDNT 使用上述方法
(您还可以向用户实体添加常量......)