【问题标题】:Symfony - Combine two properties in a single entity form fieldSymfony - 在单个实体表单字段中组合两个属性
【发布时间】:2014-04-09 10:15:49
【问题描述】:

我有一个包含许多不同字段(如书名、会议等)的出版物实体。我想构建一个搜索表单,其中一个功能请求是将两个搜索参数组合在一个选择字段中。到目前为止,我在表单构建器中有这样的东西:

$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');
                      }
              ));

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

【问题讨论】:

  • 研究数据转换器。

标签: forms symfony entity symfony-2.3


【解决方案1】:

Entity 字段类型是 Choice 字段类型的子字段。因此,您可以通过“选择”参数提供数据。将它与返回包含您需要的数据的数组的(例如存储库)方法结合起来可能是适合您的解决方案。

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

【讨论】:

  • 我想过这个问题,但不幸的是我无法从 AbstractType 类中访问 Doctrine。我猜我可以将 Repo 作为输入参数移交,但我在某处读到这将非常“不像 Symfony”。你觉得还可以吗?
  • 是的,您可以将存储库(或管理器)添加到类型选项中(它们存在是有原因的!)。另一种方法是对表单的其余部分使用表单类型,并在控制器中将新的实体字段添加到表单中。例如,这通常是您制作按钮的方式。更像 Symfony。
  • 我刚刚发现,您可以使用$this->doctrine,而不是使用$this->getDoctrine()。所以我不必将 an 选项传递给 Type。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多