我有一个实体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;
答案 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() . ')' : '';
},
])