首先两件事。您需要为这两个类创建访问器方法。这意味着创建:
/**
* ...
*/
class TblUser
{
// ...
public function getRoles()
{
return $this->roles->toArray();
}
public function setRoles(Collection $roles)
{
foreach ($roles as $role) {
$this->addRole($role);
}
}
public function addRole(TblPrivilege $role)
{
if (!$this->roles->contains($role)) {
$this->roles->add($role);
$role->addUser($this);
}
}
public function removeRole(TblPrivilege $role)
{
if ($this->roles->contains($role)) {
$this->roles->removeElement($role);
$role->removeUser($this);
}
}
}
/**
* ...
*/
class TblPrivileges
{
// ...
public function getUsers()
{
return $this->users;
}
public function setUsers(Collection $users)
{
foreach ($users as $user) {
$this->addUser($user);
}
}
public function addUser(TblUser $user)
{
if (!$this->users->contains($user)) {
$this->users->add($user);
}
}
public function removeUser(TblUser $user)
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
}
}
}
对于实际调用$用户> addRole()方法,我真的走了学说事件的用户,这实际上会取默认角色的坚持(因此,在注册过程中) 。这在Doctrine documentation上有详细记录。
要注册一个事件订户,你应该看看Symfony documentation:
我已经应用了所有代码(谢谢)和事件订阅者也是如此。我的第一个问题是,我怎么知道prePersist甚至被称为一个新的实体,而不仅仅是一个更新?我还没有第二个问题,但我相信当我进一步研究这个问题的时候。 –
下一个问题:因为我正在处理一个空的数据库,某些属性没有定义(TblPrivilege-> users)。当我尝试将用户添加到TblPrivilege时,出现错误。什么是确保这些属性被实例化的最佳方式。我想只是检查addUser方法,如果用户是有效的,如果没有实例化它。 –
使用您的建议得到了这项工作。我想知道你是否可以给我上述2个问题的答案。谢谢 –