我正在使用Symfony3,我希望能够通过将两个字段组合在一起来显示自定义选择值,例如名称和城市。所以,实质上在选择框中它会显示:
------------------------------------
John Smith - Denver
------------------------------------
Abe Lincoln - Washington D.C
------------------------------------
George Washington - Washington D.C
------------------------------------
etc...
------------------------------------
这是我的表格......
$builder->add('person', EntityType::class, array(
'required'=>false,
'class'=>'AppBundle:Person',
'choice_label'=>'name',
'label'=>'Choose the person',
'empty_data'=>null,
'placeholder'=>"None",
'query_builder' => function(EntityRepository $repository) {
return $repository->createQueryBuilder('p');
}
));
答案 0 :(得分:1)
正如Symfony Doc所说,choice_label
也可以是一个可调用的,它可以为您提供两种选择。
为组合值创建一个getter,它应该代表实体,如:
class Person {
// ...
public function getComposedName() {
return $this->name . ' - ' . $this->city;
}
}
然后以choice_label
到'composedName'
的形式设置。
请注意它是composedName
,而不是getComposedName
,因为Symfony会在这里使用PropertyAccesor
,它会尝试使用getter getComposedName
获取价值。
如果您在其他地方需要此值
,这可能很有用如果您只需要这种特殊形式,那么您可以将匿名函数直接传递给表单:
'choice_label'=> function($person) {
return $person->getName(). ' - ' . $person->getCity();
}