Forms symfony2多对多实体形式

Forms symfony2多对多实体形式,forms,authentication,symfony,many-to-many,Forms,Authentication,Symfony,Many To Many,我有两个实体用户角色。这两者都在Symfony2中用于身份验证。身份验证过程需要在返回数组的User类中具有方法“getRoles”。 另一方面,表单生成器需要作为集合指定角色。 如何强制表单生成器使用特定的getter来获取角色集合 class UserType extends AbstractType{ //... ->add('roles', 'entity', array( 'class' => 'MyBundle:Role',

我有两个实体用户角色。这两者都在Symfony2中用于身份验证。身份验证过程需要在返回数组的User类中具有方法“getRoles”。 另一方面,表单生成器需要作为集合指定角色。 如何强制表单生成器使用特定的getter来获取角色集合

 class UserType extends AbstractType{
 //...
 ->add('roles', 'entity', array( 'class' => 'MyBundle:Role',
                                    'property' => 'name',
                                    'required' => false, 
                                    'multiple' => true,
                                    'expanded' => true,
                                    );

 //...
  }


 class User implements UserInterface {
 //...
    public function getRoles() {
    return $this->roles->toArray();  //This needs authentication mechanism
   }

 public function getRolesCollection() {
    return $this->roles;            //This needs form builder.
}
 //...
 }

也许你可以尝试将所有的内容都颠倒:

class UserType extends AbstractType{
 //...
 ->add('rolesCollection', 'entity', array( 'class' => 'MyBundle:Role',
                                    'property' => 'name',
                                    'required' => false, 
                                    'multiple' => true,
                                    'expanded' => true,
                                    );

 //...
  }


 class User implements UserInterface {
  protected $rolesCollection
 //...
    public function getRoles() {
    return $this->rolesCollection->toArray();  //This needs authentication mechanism
   }

 public function getRolesCollection() {
    return $this->rolesCollection;            //This needs form builder.
}
 //...
 }

你为什么不交换它呢?逻辑上,getRoles应该返回集合。我不明白你为什么一开始就这么做。用例是什么?这是因为Symfony的身份验证过程需要阵列才能正常工作。如果不使用->toArray,它会引发异常可捕获的致命错误:参数4传递给Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::\uu构造必须是数组,给定对象,