2012-08-30 234 views
1

我有簡單的UserInterface實體:角色界面和管理角色

function getRoles() 
{ 
    return $this->roles->toArray(); 
} 

,並與許多與角色的實體接口一對多的關係

/** 
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"}) 
*/ 
protected $roles; 

當我試着使用表單類型來管理用戶角色

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('roles'); 
} 

Symfony回報我一個錯誤:

Expected argument of type "Doctrine\Common\Collections\Collection", "array" given

我知道錯誤是在實體的getRoles方法返回一個數組的用戶,但我也知道getRoles是一個接口的方法,並且必須返回一個數組!

任何人都有一個很好的解決方案?

回答

5

你有兩個getRoles功能:

  • 一個是對的UserInterface接口返回角色列表的功能
  • 另一種是你的$角色屬性

由於吸氣這兩個函數不能被調用相同,並且它們不能是相同的函數,因爲它們需要返回不同的類型,並且由於第一個函數需要遵循接口,所以我建議您更改第二個函數的名稱。由於這需要反映該屬性的名稱,因此應該更改此名稱。

所以,你需要做的是這樣的:

/** 
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"}) 
*/ 
protected $userRoles; 

/* interface */ 

function getRoles() 
{ 
    return $this->userRoles->toArray(); 
} 

/*getter*/ 

function getUserRoles() { 
    return $this->userRoles; 
} 

然後

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('userRoles'); 
}