Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms symfony2使用arraycollection形成多选_Forms_Symfony_Entity_Arraycollection_Multipleselection - Fatal编程技术网

Forms symfony2使用arraycollection形成多选

Forms symfony2使用arraycollection形成多选,forms,symfony,entity,arraycollection,multipleselection,Forms,Symfony,Entity,Arraycollection,Multipleselection,我想创建一个表单来编辑我的用户。 与多个相关的用户和角色。 在UserUsers实体中,我有一个$roles变量,它是ArrayCollection: public function __construct() { $this->roles = new ArrayCollection(); } 在我的表单上,我想通过多个select表单元素向我的用户添加角色。 在我的用户表单中: public function buildForm( FormBuilderInterface $b

我想创建一个表单来编辑我的用户。 与多个相关的用户和角色。 在UserUsers实体中,我有一个$roles变量,它是
ArrayCollection

public function __construct()
{
    $this->roles = new ArrayCollection();
}
在我的表单上,我想通过多个select表单元素向我的用户添加角色。 在我的用户表单中:

public function buildForm( FormBuilderInterface $builder, array $options ) {
    $builder->add( 'username' )
            ->add( 'password', 'repeated', array( 
                    'type' => 'password',
                    'mapped' => false,
                    'required' => false,
                    'first_options' => array( 
                            'label' => 'Password' ),
                    'second_options' => array( 
                            'label' => 'Repeat Password' ) ) )
            ->add( 'roles', 'choice', array( 
                    'mapped' => false,
                    'multiple' => true ) );
}
现在我的多重选择是空的

如果将“映射”设置为true,则会收到一条错误消息:

无法在中将UserRoles转换为int


我已经尝试了很多方法,但是我不能正确地解决这个问题。

对于fosuserbundle,我是这样做的:

        $builder->add('roles', 'choice', array(
        'multiple' => true,
        'choices' => array(
            'ROLE_USER' => 'User',
            'ROLE_AUTHOR' => 'Autor',
            'ROLE_MODERATOR' => 'Moderator',
            'ROLE_ADMIN' => 'Admin'
        ),
        'label' => 'Rollen',
        'required' => true
    ));

要选择实体,应使用特殊选择字段类型“实体”(有关详细信息,请参阅Symfony手册)。有关示例,请参见我对a的回答。
如果您遇到进一步的错误,您可能会发现这个问题也很有帮助。

您的$roles ArrayCollection中有什么类型?$roles ArrayCollection中的所有元素都是一个实体(UserRoles)。要选择实体,您应该使用特殊的选择字段类型“entity”()。例如,请参阅我对类似问题的回答-好的,我更改了如下角色:
$builder->add('roles','entity',array('class'=>'AcmeUserBundle:UserRoles','multiple'=>true',property'=>name')然后我得到了一条错误消息:类型为“条令\公共\集合\集合”的预期参数,“数组”给定奇数,因为ArrayCollection实现条令\公共\集合\集合。是否可能将roles()重新分配给其他位置的数组?或者ArrayCollection没有解析为条令类?这很好,但我将角色存储在数据库中,当我打开用户进行编辑时,我希望选择分配给当前用户的角色。我已经理解并强烈建议使用FOSUserBundle,因为安全性。在那里,您可以为一个用户存储多个角色。这就是你想要的结局。