首页 > 解决方案 > 表单查询symfony 3.4中的空选项

问题描述

我必须在 query_builder 表单中显示一个实体

这是我的表单类型的代码:

$builder->add('dispositif', EntityType::class, array(
        'class'     => 'LeaPrestaBundle:EgwDispositif',
        'label'     => 'nomDispositif',
        'required'  => true,
        'empty_data' => null,
        'query_builder' => function( $er)
        {
        return $er->createQueryBuilder('d')
        ->where('d.isActive = :isActive')
        ->setParameter('isActive', 1 )
        ->orderBy('d.nomDispositif','ASC');
        },
    ));

问题是该选项为空:

<select id="egw_presta_dispositif" name="egw_presta[dispositif]">
    <option value="52"></option>
    <option value="55"></option>
    <option value="62"></option>
    <option value="58"></option>
</select>

例如,除了值 52,还应该有一个“dispositif”标签(dispositif 的名称)。

它来自实体吗?

在此先感谢您的帮助!

标签: formssymfony

解决方案


尝试使用包含您要显示的内容的 EgwDispositif 字段添加“choice_label”属性:

$builder->add('dispositif', EntityType::class, array(
        'class'     => 'LeaPrestaBundle:EgwDispositif',
         /** label will be displayed next to your form field unless it's a translation key or else  **/
        'label'     => 'Nom du dispositif',
        'required'  => true,
        'empty_data' => null,
        /** any field containing what you want to display as option label  **/
        'choice_label' => 'nomDispositif',
        'query_builder' => function( $er)
        {
        return $er->createQueryBuilder('d')
        ->where('d.isActive = :isActive')
        ->setParameter('isActive', 1 )
        ->orderBy('d.nomDispositif','ASC');
        },
    ));

您似乎将表单字段属性的选项 'label' 与选项 'choice_label' 混淆了。您可能希望您的标签成为用户会阅读的东西(但也许不是,这取决于您)

看看这里:https ://symfony.com/doc/current/reference/forms/types/entity.html


推荐阅读