子类的Symfony表单不会加载选项

时间:2017-03-09 21:05:24

标签: symfony doctrine-orm symfony-forms formbuilder

在formtype中:

$builder
    ->add('tarifaReexpedicion', EntityType::class, array(
        'class' => 'AppBundle:SubtarifaReexpedicion',
        'label' => false,
        'choice_label' => 'nombre',
        'placeholder' => 'Elige una subtarifa...',
    ));

在父类Subtarifa中有一个名为nombre的属性,其中getName和setName ......一切正确。 子类为SubtarifaReexpedicion

在这段代码中,当我更改'class' => 'AppBundle:Subtarifa'时,一切正常,它会加载所有选项(所有选项,而不是该子类的特定选项)。

父实体(Subtarifa)的配置:

 * @ORM\Entity
 * @ORM\Table(name="subtarifas")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"FLETE" = "SubtarifaFlete", "REEXP" = "SubtarifaReexpedicion", "MASALLA" = "SubtarifaMasalla"})

欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

在此代码中:

->add('tarifaReexpedicion', EntityType::class, array(
    'class' => 'AppBundle:SubtarifaReexpedicion',
    'label' => false,
    'choice_label' => 'nombre',
    'placeholder' => 'Elige una subtarifa...',
));

您正在使用AppBundle:SubtarifaReexpedicion实体,您所需的choice_label为nombre,因此请确保getNombre()类中有AppBundle:SubtarifaReexpedicion方法。

choice_label基本上会调用回调,就好像你这样做:

'choice_label' => function ($tarifaReexpedicion) {
    return $tarifaReexpedicion->getNombre();
}