Forms Symfony-在单个实体表单字段中组合两个属性

Forms Symfony-在单个实体表单字段中组合两个属性,forms,symfony,entity,symfony-2.3,Forms,Symfony,Entity,Symfony 2.3,我有一个出版物实体,它有许多不同的字段,如书名、会议等。我想建立一个搜索表单,其中一个功能要求是在一个选择字段中组合两个搜索参数。到目前为止,我在form builder中有类似的内容: $builder->add('booktitle', 'entity', array( 'required' => false, 'label' => 'Conference/Booktitle', 'pro

我有一个出版物实体,它有许多不同的字段,如书名、会议等。我想建立一个搜索表单,其中一个功能要求是在一个选择字段中组合两个搜索参数。到目前为止,我在form builder中有类似的内容:

$builder->add('booktitle', 'entity', array(
              'required' => false, 
              'label' => 'Conference/Booktitle',
              'property' => 'booktitle',
              'class' => 'indPubBundle:Publication', 
              'query_builder' => function(EntityRepository $er) {
                     return $er->createQueryBuilder('p')
                               ->groupBy('p.booktitle')
                               ->orderBy('p.booktitle', 'ASC');
                      }
              ));

基本上,我将所有书名显示为一个选择字段。我现在想要的是在相同的选择字段中也有会议。有没有办法做到这一点?

实体字段类型是所选字段类型的子项。因此,您可以通过“选项”参数提供数据。将其与返回包含所需数据的数组的方法(例如,repository)相结合可能是一个适合您的解决方案

$builder->add('booktitle', 'entity', array(
            'required' => false,
            'label' => 'Conference/Booktitle',
            'class' => 'indPubBundle:Publication',
            'choices' => $this->getDoctrine()->getRepository('indPubBundle:Publication')->getData(),
        ));

研究数据转换器。我考虑过这一点,但不幸的是,我无法从AbstractType类中访问条令。我想我可以把回购协议作为一个输入参数,但我在某个地方读到,这将非常“不像Symfony”。您认为它还可以吗?是的,您可以将存储库(或管理器)添加到类型选项中(它们的存在是有原因的!)。另一种方法是对表单的其余部分使用formtype,并在控制器中向表单添加新的实体字段。例如,按钮通常就是这样做的。我刚刚发现,您可以使用
$this->doctrine
而不是使用
$this->doctrine
。因此,我不必将an选项传递给类型。