forms - EntityType 的 choice_value 正在删除重复值

标签 forms symfony

我正在尝试构建一个填充有数据库实体的选择 html 元素。我需要从非默认实体值中提取 select 元素中的标签和值,因此我使用“choice_label”和“choice_value”选项。

问题是任何具有重复“choice_value”(区域)值的实体都将被删除(替换?)。

这是我的表单生成器:

$builder->add('country', EntityType::class, array(
    'class' => 'AcmeCheckoutBundle:Country', 
    'label' => 'Country',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('c')
            ->orderBy('c.name', 'ASC');
    },
    'choice_label' => 'name',
    'choice_value' => 'territory'
));

这就是我所期望的:

<select>
    <option value="1">United Kingdom</option>
    <option value="2">France</option>
    <option value="2">Germany</option>
    <option value="3">Brazil</option>
    <option value="3">Canada</option>
</select>

这就是我得到的:

<select>
    <option value="1">United Kingdom</option>
    <option value="2">Germany</option>
    <option value="3">Canada</option>
</select>

如果我从表单生成器中删除“choice_value”,我会得到所有记录,但显然值错误。

最佳答案

之前的 symfony3 ChoiceType 选择数组具有以下结构:

$choices = [
    'value1' => 'label1',
    'value2' => 'label2', ...
];

因此,当您用元素填充此数组时,具有重复值的元素将被覆盖。由于 symfony2.7 选择数组被重新设计,现在它具有反转的结构:

$choices = [
    'label1' => 'value1',
    'label2' => 'value2', ...
];

现在您可以有重复的值,但必须有唯一的标签。该结构是在 symfony2.7 中引入的,但默认不启用,在 symfony3 中默认使用。

要在 symfony2.7 中启用此结构,您可以使用选项 choices_as_values ( http://symfony.com/doc/2.7/reference/forms/types/choice.html#choices-as-values )。

实际上 EntityType symfony 文档中没有提到这个选项,但由于 EntityType 扩展了 ChoiceType 它应该可以工作。如果不是,您可以使用 ChoiceType 代替 EntityType 并手动提供选择。

关于forms - EntityType 的 choice_value 正在删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768871/

相关文章:

javascript - 在 mailto 表单中包含选择选项

PHP表单文件上传到Mysql并到服务器

php - 如何在 Symfony 中为 example.com/username 创建路由并保留所有旧 URL

php 注释、命名空间和 use 关键字

php - 未找到 Symfony 类

php - Symfony 4 Form - Ajax 选择人口

php - 表单、Mysql 和值

forms - 选择或创建实体

php - 使用 HTML 表单将 Smarty 变量传递给 php 文件。

symfony - Symfony 上的批量请求