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 返回一个错误:

给定“Doctrine\Common\Collections\Collection”、“array”类型的预期参数

我知道错误出现在返回数组的实体 User 的 getRoles 方法中,但我也知道 getRoles 是接口的方法,必须返回一个数组!

有人有好的解决方案吗?

4

1 回答 1

5

您有两个 getRoles 函数:

  • 一个是 UserInterface 接口的函数,它返回角色列表
  • 另一个是 $roles 属性的吸气剂

由于两个函数不能同名,而且它们不能是同一个函数,因为它们需要返回不同的类型,并且由于第一个函数需要遵循接口,我建议您更改第二个函数的名称。由于这需要反映属性的名称,因此您应该更改此名称。

因此,您需要执行以下操作:

/**
 * @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');
}
于 2012-08-30T15:47:46.250 回答