symfony形式:在标签中为选择元素获取第二个属性

时间:2018-11-15 13:24:05

标签: php symfony jquery-select2 symfony4

我有一个实体Institution。用户可以选择一种或多种形式。我将Select2用于字体结尾。机构具有属性internationalName,这是默认属性,原因是:

Institution.php

public function __toString()
{
    return $this->internationalName;
}

机构也可以使用缩写名称作为属性abbreviation。我想要的是使用第二个属性以选择形式显示(如果存在)。更好的是它没有显示,但是您可以搜索它,但是我真的不知道这是否有可能。

我可以更改__toString()使其包含abbreviation,但是由于其他形式,这是不必要的,因此我试图通过

使其仅以这种形式显示

LocationType.php

->add('Institutions', EntityType::class, [
    'class' => Institution::class,
    'label' => 'Connected Institution(s)',
    'multiple' => true,
    'attr' => ['data-select' => 'true', 'data-placeholder' => 'start typing to find your institution...'],
    'constraints' => array(
        new Count(array(
            'min' => 1,
            'minMessage' => "Select at least one institution."))),
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('i')
            ->orderBy('i.internationalName', 'ASC');
    },

我尝试使用'choice_label' => 'abbreviation'(仅作为测试),但是这会使所有标签都变成空白,我真的不明白为什么。我也尝试过'choice_label' => 'internationalName'.'abbreviation',但由于没有属性internationalNameabbreviation,因此无法正常工作。我曾考虑过创建一个将两者结合在一起的新属性,但是鉴于'choice_label' => 'abbreviation'已经产生了一个空白列表,我认为这行不通。还有其他选择或解决方案吗?

编辑:根据要求,相关实体类别部分, Institution.php

/**
 * @Assert\NotBlank(message="Please enter the international name.")
 * @ORM\Column(type="string")
 */
private $internationalName;

/**
 * @ORM\Column(type="string", nullable=true)
 */
private $abbreviation;

1 个答案:

答案 0 :(得分:1)

也许像这样:

https://symfony.com/doc/current/reference/forms/types/choice.html#choice-value

  ->add('Institutions', EntityType::class, [
    'class'         => Institution::class,
    'label'         => 'Connected Institution(s)',
    'query_builder' => function (EntityRepository $er) {
        return $er
          ->createQueryBuilder('i')
          ->orderBy('i.internationalName', 'ASC')
        ;
    },
    'choice_value' => function (Institution $institution = null) {
        return $institution ? $institution->getInternationalName() . '(' . $institution->getAbbreviation() . ')' : '';
    },
  ])