【问题标题】:Pass array with data to ChoiceType (html select) in Symfony v4.2在 Symfony v4.2 中将带有数据的数组传递给 ChoiceType(html 选择)
【发布时间】:2019-05-24 20:20:26
【问题描述】:

简介

对于我的个人项目,我使用

  • Symfony v4.2
  • PHP 7.2.12

问题

我不知道如何让ChoiceType 元素显示IDsEMAILs 作为HTML SELECT 选项索引

示例

图片显示html select的当前状态以及来自数据库的数据(idemail)。

代码

来自数据库($this->userChoices)的数据数组

array:4 [
    0 => array:2 [
        "id" => 7
        "email" => "1st@example.com"
    ]
    1 => array:2 [
        "id" => 8
        "email" => "2nd@example.com"
    ]
    2 => array:2 [
        "id" => 5
        "email" => "3rd@example.com"
    ]
    3 => array:2 [
        "id" => 6
        "email" => "4th@example.com"
    ]
]

我得到了什么

<select id="my-select" name="my-select" class="form-control">
    <optgroup label="0">
        <option value="7">7</option>
        <option value="1st@example.com">1st@example.com</option>
    </optgroup>
    <optgroup label="1">
        <option value="8">8</option>
        <option value="2nd@example.com">2nd@example.com</option>
    </optgroup>
    <optgroup label="2">
        <option value="5">5</option>
        <option value="3rd@example.com">3rd@example.com</option>
    </optgroup>
    <optgroup label="3">
        <option value="6">6</option>
        <option value="4th@example.comm">4th@example.com</option>
    </optgroup>
</select>

我想得到什么

<select id="my-select">
    <option value=""> Please choose an option </option>
    <option value="7">1st@example.com</option>
    <option value="8">2nd@example.com</option>
    <option value="5">3rd@example.com</option>
    <option value="6">4th@example.com</option>
</select>

myChoiceType的相关部分

->add('selectUser', ChoiceType::class,
    [
        'choices' => $this->userChoices,
        'choice_value' => function ($choice)
        {
            return $choice;
        },
        'choice_label' => function ($value)
        {
            return $value;
        },
        'mapped' => false,
        'expanded' => false,
        'multiple' => false,
    ]
)

终于

我做错了什么?

如何让ChoiceType 以我想要的方式在html select 中显示data

感谢您的想法!

【问题讨论】:

  • 你好,@Jeto!它已经显示在第一个代码块中。我澄清了代码块的标题。

标签: php forms symfony select symfony4


【解决方案1】:

根据the docschoices值必须是一个简单的key => value数组。

choices 选项是一个数组,其中数组键是 项目的标签和数组值是项目的值

您可以使用此代码轻松获得所需的选择数组:

$choices = [];
foreach ($this->userChoices as $choice) {
  $choices[$choice['email']] = $choice['id'];
}

然后使用下面的初始化代码:

->add('selectUser', ChoiceType::class,
    [
        'choices' => $choices,
        'mapped' => false,
        'expanded' => false,
        'multiple' => false
    ]
)

并不是说我删除了 choice_valuechoice_label 在这种情况下没有任何用途。

【讨论】:

  • 嘿@Jeto!在将数据数组传递给表单之前,我在控制器中使用了您的代码,但我收到了通知Notice: Undefined index: 1st@example.com
  • @Rikijs 对不起,我搞砸了代码。现在应该好多了! (编辑答案)
  • 谢谢@Jeto,现在可以了!刚刚交换了id 广告email 以满足我的需求 - 因此显示电子邮件并且值是 id。
  • @Rikijs 哦,你是对的,我刚刚再次编辑,我将它们混合在一起(但这足以给你这个想法)。现在应该好了。
【解决方案2】:

只需将其作为一维数组传递,电子邮件作为键,id 作为值。

$choices = [
    '1st@example.com' => 7,
    '2nd@example.com' => 8,
];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多