gpt4 book ai didi

forms - Symfony - ChoiceType 浮点值

转载 作者:行者123 更新时间:2023-12-02 01:20:51 24 4
gpt4 key购买 nike

我在 Symfony 3.1.6 上运行,我在表单渲染中遇到了一些奇怪的问题。

这是我的表格:

    $form = $this->createFormBuilder()
->add('foo', ChoiceType::class, [
'choices' => [
'00 h 30' => 0.5,
'01 h 00' => 1.0,
],
])
->add('bar', ChoiceType::class, [
'choices' => [
'00 h 30' => 0.5,
'01 h 00' => 1.0,
'01 h 30' => 1.5,
],
])
->add('baz', ChoiceType::class, [
'choices' => [
'00 h 30' => 0.5,
'01 h 00' => 1.0,
'02 h 00' => 2.0,
],
])
->getForm();

和一个基本的渲染:
{{ form_start(form) }}
{{ form_widget(form.foo) }}
{{ form_widget(form.bar) }}
{{ form_widget(form.baz) }}
{{ form_end(form) }}

我懂了:
<form>
<select id="form_foo" name="form[foo]">
<option value="0.5">00 h 30</option>
<option value="1">01 h 00</option>
</select>
<select id="form_bar" name="form[bar]">
<option value="0">00 h 30</option>
<option value="1">01 h 00</option>
<option value="2">01 h 30</option>
</select>
<select id="form_baz" name="form[baz]">
<option value="0.5">00 h 30</option>
<option value="1">01 h 00</option>
<option value="2">02 h 00</option>
</select>
</form>

为什么我的 bar渲染不显示好的值?事实上,每次我使用大于 1 的值而不是舍入为 int 值时,这些值只是 int 增量。

最佳答案

这是因为 array 的键必须是 integerstring仅( PHP Manual )。如果提供了浮点键,则将其转换为整数 here由 PHP 自动执行。让我们看一个例子:

$cache[$choice] = true;

// when $choice = 0.5: $cache = [0 => true]
// when $choice = 1.0: $cache = [0 => true, 1 => true]

然后,当 $choice = 1.5 this line ( isset($cache[1.5]) ) 返回 true因为真的查 isset($cache[1])并且这个键已经存在,所以 castableToString() 返回 false (检测为重复)并且选择值是通过递增整数作为值生成的。

我认为这是一个错误。

现在,使用 choice_value解决这个问题的选项:
'choice_value' => function ($value) {
return $value;
}

我在 Github 上对这个老问题发表了评论: https://github.com/symfony/symfony/issues/13817#issuecomment-257297132

已在 https://github.com/symfony/symfony/pull/20378 中修复

关于forms - Symfony - ChoiceType 浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40340229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com