Ign*_*kis 2 forms query-builder symfony
我想用DB中的选项显示选择.在这种情况下,我使用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'
))
)
))
Run Code Online (Sandbox Code Playgroud)
现在一切都很好.我select用id值的文本获得了必要选项的元素.
<select>
<option value="id">id</option>
...
</select>
Run Code Online (Sandbox Code Playgroud)
我该如何定制?
例如,我希望它是组合id和type表列:
<select>
<option value="id">#id (type)</option>
...
</select>
Run Code Online (Sandbox Code Playgroud)
您可以使用该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'
))
)
))
Run Code Online (Sandbox Code Playgroud)
用吸气剂:
$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'
))
)
))
Run Code Online (Sandbox Code Playgroud)
Internship.php:
Class Internship
{
//...
public function getIdAndType()
{
return '#'.$this->id.' ('.$this->type.')';
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
对于较旧的Symfony版本(<= 2.6),此选项已命名property并使用PropertyAccessor组件支持的内容,因此您不能使用函数,只能使用getter.
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |