Symfony 3 ChoiceType - 属性 empty_data 被忽略

3

我有一个搜索表单的问题。可能我的选择列表中没有任何内容。

这就是为什么当它为空时,我想显示一个默认消息。

然而,当我设置了我的 'empty_data' 属性时,什么都没有发生,我的选择列表还是空的。

我的表单类型:

/**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('organisation',ChoiceType::class,array(
            'choices' => $options['distributeurs'],
            'choice_label' => function ($value, $key, $index) {
                    return $value->getOrganisation();
                },
            'choice_value' => 'id',
            'empty_data' => 'No distributor found'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'distributeurs' => 'ProjectBundle\Entity\Organisation\Organisation',
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'projectbundle_organisation_search';
    }

空选择框

在控制器层面上:

 $distributeurs = $em->getRepository('ProjectBundle:Organisation\Organisation')->createQueryBuilder('a')
            ->where('a.id IN (:distributeurs)')->setParameter('distributeurs',$organisationDistriId)->getQuery()->execute();
        $form = $this->createForm('ProjectBundle\Form\Organisation\OrganisationDistributeurType', null, array(
            'distributeurs' => $distributeurs,
            'action' => $this->generateUrl('admin_organisations_index'),
            'method' => 'GET',
        ));
和信息都可以正常工作,只有“empty_data”属性没有显示。

“placeholder”属性可以工作,但这不是我想要的。

你有什么想法吗?

谢谢!


2
请发布您的代码,而不是代码图片。 - Alex Howansky
已完成,抱歉。 - Peter Artoung
1
empty_data 是在表单前端没有选择任何选项时传回给 Symfony 的值。它本身不会在表单上显示。详见:http://symfony.com/doc/current/reference/forms/types/choice.html#empty-data - naththedeveloper
好的!你有想法在没有项目时显示一条消息吗? - Peter Artoung
如果在 $options['distributors'] 中没有项目,我是否可以只放置一个占位符? - Peter Artoung
1个回答

1
尝试在下次发布代码时,不要发图片,因为那不够清晰。
在表单生成器中,尝试按照以下方式创建选择框(从版本2.6开始实现了占位符):
$builder->add('organisation', ChoiceType::class, array(
'placeholder' => 'Choose an option',
));

是的,抱歉^^'。所以我要使用占位符,这并不是太糟糕的解决方案。 - Peter Artoung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接