SETUP:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('relatedEntity', 'entity', array( 'class' => 'ProjectName\RelatedEntityBundle\Entity\RelatedEntity', 'query_builder' => function (EntityRepository $er) { $queryBuilder = $er->createQueryBuilder('relatedEntity'); $queryBuilder->resetDQLPart('select'); $queryBuilder->resetDQLPart('from'); $queryBuilder->select('relatedEntity') ->distinct(true) ->from('ProjectNameRelatedEntityBundle:RelatedEntity', 'relatedEntity'); return $queryBuilder; }, .... .... }
的模板:
(relatedEntity定义了__toString()
函数来显示其名称。)
{{ form_label(form.relatedEntity) }} {{ form_widget(form.relatedEntity) }} {{ form_errors(form.relatedEntity) }}
的问题:
entity
类型只能获取相关的某些字段
实体并在模板中显示它们?
的测试:
我似乎无法通过传递一个数组来构建带有choice type的表单,以显示一个带有模板中相关实体的id和名称的selectBox。我总是得到同样的错误,要求我在该choiceS选项中插入一个实体对象数组。
让我们看一下主实体的formType,buildForm函数的一些例子:
- >添加(' relatedEntity',null,数组('标签' =>' relatedEntity')
->add('relatedEntity', 'entity', array( 'class' => 'ProjectName\RelatedEntityBundle\Entity\RelatedEntity', 'query_builder' => function (EntityRepository $er) { $queryBuilder = $er->createQueryBuilder('relatedEntity'); $queryBuilder->resetDQLPart('select'); $queryBuilder->resetDQLPart('from'); $queryBuilder->select('relatedEntity') ->from('ProjectNameRelatedEntityBundle:RelatedEntity', 'relatedEntity'); return $queryBuilder; }, 'property' => 'descripcion' ))
$ arrayValues = array(' 1' =>' name1',' 2' =>' name2',&# 39; 3' = GT;' NAME3&#39);
->add('relatedEntity', 'choice', array( 'choices' => $arrayValues, 'multiple' => false, 'label'=> 'relatedEntity' ))
$ arrayValues = array(' 1' =>' name1',' 2' =>' name2',&# 39; 3' = GT;' NAME3&#39);
->add('relatedEntity', 'entity', array( 'class' => 'ProjectName\RelatedEntityBundle\Entity\RelatedEntity', 'choices' => $arrayValues , 'multiple' => false, 'label'=> 'relatedEntity' ))
我还尝试通过构建我的相关实体的一系列objets来破解选择输入requeriment,但它要求我在发送到选择类型之前保留这些实体。
答案 0 :(得分:2)
问题是你的表单元素,它要求它的内容是一个实体,它是类ProjectName\RelatedEntityBundle\Entity\RelatedEntity
的一个实例,但你传递一个数组作为选择:
$arrayValues = array(
'1'=>'name1',
'2'=>'name2',
'3'=>'name3'
);
另一方面,当您使用choice-element并添加数组时,您的表单元素将返回一个字符串,而您的实体需要relatedEntity
作为上述类的实例。
无论哪种方式,您都必须确保从元素添加或检索的数据符合您的要求。
你可以做的是,使它成为choice
- 元素并删除类限制(正如你所尝试的那样)。然后,为了确保它将返回实体实例而不是字符串,您可以使用Form Events。您可以使用FormEvents::SUBMIT
或FormEvents::PRE_SUBMIT
来检查选择了哪个实体名称,并执行查询以获取相应的实体,例如类似的东西:
$objectRepository->findEntityBy(array('name' => $name));