如何在用户实体中使用Symfony参数

时间:2017-06-17 20:16:39

标签: symfony symfony-3.2

这是一个Symfony 3项目。

在用户实体中,我需要实现方法getRoles()。我有一个私有成员$roles这是一个数组,我将其添加到serializeunserialize方法中。

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;
}

2 个答案:

答案 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 使用上述方法

(您还可以向用户实体添加常量......)