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

2つのgetRoles関数があります。

  • 1つは、ロールのリストを返すUserInterfaceインターフェイスの関数です。
  • もう1つは、$rolesプロパティのゲッターです。

両方の関数を同じように呼び出すことはできず、異なる型を返す必要があるため同じ関数にすることはできません。また、最初の関数はインターフェイスに従う必要があるため、2番目の関数の名前を変更することをお勧めします。これはプロパティの名前を反映する必要があるため、この名前を変更する必要があります。

したがって、次のようなことを行う必要があります。

/**
 * @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 に答える