我有具有欄位角色的物體用戶:
/**
* @ORM\Column(name="roles", type="json")
*/
private $roles = [];
public function getRoles(): array
{
return $roles = $this->roles;
}
public function setRoles($roles): self
{
$this->roles[] = $roles;
return $this;
}
我想添加功能以將用戶角色從 ROLE_ADMIN 更新為 ROLE_USER。我在我的控制器中嘗試過這個,但它沒有用 ROLE_USER 替換 ROLE_ADMIN,而是將其插入:“ROLE_ADMIN”“ROLE_USER”。這是我的控制器:
public function updateuser(Request $request, $id) {
$entityManager = $this->getDoctrine()->getManager();
$usr = $this->getDoctrine()->getRepository(User::class)->find($id);
$usr->setRoles("ROLE_USER");
$entityManager->persist($usr);
$entityManager->flush();
uj5u.com熱心網友回復:
首先,它的最佳實踐是每個用戶至少有一個默認角色,如
ROLE_USER. 如果你想給用戶額外的角色,那么你可以用 beside 添加它們,ROLE_USER例如ROLE_ADMIN。現在仔細看看陣列在 PHP 中是如何作業的。讓我們來看看你的 setter 函式的代碼
setRoles。
當您像這樣撰寫值分配時$this->roles[] = $roles,就會將一個值添加到陣列中。這就是為什么你在你的代碼中你現在在你的陣列中擁有兩個角色。已存在ROLE_ADMIN且在您添加的函式呼叫之后ROLE_USER。
當您像這樣撰寫賦值時$this->roles = $roles,整個陣列將被新值覆寫。
結論:
如果您想要一個簡單的解決方案,那么您的代碼應該是這樣的:
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
}
然后你可以這樣稱呼它:
$user->setRoles(['ROLE_USER']);
uj5u.com熱心網友回復:
該setRoles函式只接受陣列。
所以你的代碼應該相應地改變:
$usr->setRoles(["ROLE_USER"]);
此外,如果要將其存盤為 json,可以使用json_encode:
$usr->setRoles(json_encode(["ROLE_USER"]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/322538.html
