0

我想为我的用户角色集合创建一个下拉 dwon 菜单,如下所示:

  class UserType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('userRoles',null, array('multiple'=>false))
            ;
        }

但我收到此错误消息:

Expected an object, but got a collection. Did you forget to pass
"multiple=true" to an entity field?

任何想法如何使收藏不能多选!?

4

1 回答 1

2

如果您将“multiple”设置为 false,您正在使用的字段类型(“entity”)需要一个简单的对象作为输入。出于您的目的,您可能希望使用 CallbackTransformer 在集合和对象之间进行转换:

$builder->add(
    $builder->create('userRoles', null, array('multiple' => false))
        ->addModelTransformer(new CallbackTransformer(
            // transform the collection to its first element
            function (Collection $coll) { return $coll[0]; },
            // transform the element to a collection
            function (MyEntity $entity) { return new ArrayCollection(array($entity)); }
        ))
);

如果你不使用最新的 Symfony2 master,你应该使用不推荐使用的方法prependNormTransformer()而不是addModelTransformer().

于 2012-05-26T08:12:49.847 回答