forms - 如何自定义EntityType选项文本?

标签 forms symfony query-builder

我想显示数据库中选项的选择。在本例中,我将 EntityTypequery_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>

如何自定义它?

例如,我希望它是 idtype 表列的组合:

<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/

相关文章:

jquery - 如何检查所有字段是否有效?

php - 明确匹配任何内容的 Doctrine Query Builder

php - 如何在 Symfony 控制台中禁用命令的输出?

php - SF3+Doctrine计算日期之间的价格

php - 如何使用 Doctrine2 中的查询生成器更新多个字段?

mysql - 查询构建器不显示变量?

ruby-on-rails - Rails——将单选按钮值传递给参数

python - Django多表单1 View ..表单错误问题

javascript - 使用 jQuery 选择多个后代?

php - 如何通过属性'()查找所有?