我想显示数据库中选项的选择。在本例中,我将 EntityType
与 query_builder
一起使用:
$builder
->add('internships', EntityType::class, array(
'class' => 'IndexBundle\Entity\Internship',
'property' => 'id',
'empty_value' => 'Choose',
'query_builder' => function (EntityRepository $er) use ($trainee) {
return $er->createQueryBuilder('i')
->where('i.trainee = :trainee')
->andWhere('i.state = :state')
->setParameter('trainee', $trainee)
->setParameter('state', 'unverified');
},
'constraints' => array(
new NotBlank(array(
'message' => 'choice.not.blank'
))
)
))
现在一切都很好。我得到 select
元素,其中包含 id
值文本中的必要选项。
<select>
<option value="id">id</option>
...
</select>
如何自定义它?
例如,我希望它是 id
和 type
表列的组合:
<select>
<option value="id">#id (type)</option>
...
</select>
最佳答案
您可以使用choice_label
选项来自定义您的选项。
您可以传递一个函数来检索所需的文本,或者如果您在其他地方重用实体,则可以向实体添加 getter。
具有函数:
$builder
->add('internships', EntityType::class, array(
'class' => 'IndexBundle\Entity\Internship',
'property' => 'id',
'empty_value' => 'Choose',
'query_builder' => function (EntityRepository $er) use ($trainee) {
return $er->createQueryBuilder('i')
->where('i.trainee = :trainee')
->andWhere('i.state = :state')
->setParameter('trainee', $trainee)
->setParameter('state', 'unverified');
},
'choice_label' => function ($internship) {
return '#'.$internship->getId().' ('.$internship->getType().')';
},
'constraints' => array(
new NotBlank(array(
'message' => 'choice.not.blank'
))
)
))
带有 setter/getter :
$builder
->add('internships', EntityType::class, array(
'class' => 'IndexBundle\Entity\Internship',
'property' => 'id',
'empty_value' => 'Choose',
'query_builder' => function (EntityRepository $er) use ($trainee) {
return $er->createQueryBuilder('i')
->where('i.trainee = :trainee')
->andWhere('i.state = :state')
->setParameter('trainee', $trainee)
->setParameter('state', 'unverified');
},
'choice_label' => 'idAndType',
'constraints' => array(
new NotBlank(array(
'message' => 'choice.not.blank'
))
)
))
实习.php:
Class Internship
{
//...
public function getIdAndType()
{
return '#'.$this->id.' ('.$this->type.')';
}
}
注意:
对于较旧的 Symfony 版本(<= 2.6),此选项被命名为 property
并使用PropertyAccessor component支持的东西,所以你不能使用函数,只能使用它的 getter。
关于forms - 如何自定义EntityType选项文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41243477/