這是一個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