Symfony自定义表单选择值

时间:2017-03-14 17:47:07

标签: php symfony

我正在使用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');
            }
        ));

1 个答案:

答案 0 :(得分:1)

正如Symfony Doc所说,choice_label也可以是一个可调用的,它可以为您提供两种选择。

  1. 为组合值创建一个getter,它应该代表实体,如:

    class Person {
        // ...
    
        public function getComposedName() {
            return $this->name . ' - ' . $this->city;
        }
    
    }
    
  2. 然后以choice_label'composedName'的形式设置。 请注意它是composedName,而不是getComposedName,因为Symfony会在这里使用PropertyAccesor,它会尝试使用getter getComposedName获取价值。

    如果您在其他地方需要此值

    ,这可能很有用
    1. 如果您只需要这种特殊形式,那么您可以将匿名函数直接传递给表单:

      'choice_label'=> function($person) {
          return $person->getName(). ' - ' . $person->getCity();
      }