gpt4 book ai didi

symfony - 使用带有整数的 ChoiceType 作为选择值

转载 作者:行者123 更新时间:2023-12-03 08:01:14 26 4
gpt4 key购买 nike

在 Symfony 2.8 上遇到一个小问题。我有几个数据库字段,一个是整数,一个是小数。当我构建表单时,这些字段是下拉列表,因此我使用 ChoiceType 而不是 IntegerType 或 NumberType。

表单实际上工作正常,两者之间的内部差异显然不会造成问题,我可以选择一个值并将其正确保存到数据库中。

现在的问题出在监听器中。当某些字段发生更改时,我需要启动一个额外的进程,因此我有一个事件监听器并正在使用 getEntityChangeSet() 命令。

我注意到它报告这些字段已更改,因为它识别出 1000 和“1000”之间的差异,我可以在 Vardump 输出中看到这一差异:

 "baths" => array:2 [▼
0 => 1.5
1 => "1.5"
]

这导致监听器始终触发我的钩子(Hook),即使值确实没有改变也是如此。如果我将表单类型更改为整数,那只是一个文本条目,我会丢失下拉列表。如何强制下拉 ChoiceType 将数字视为数字?

在我的实体中,这是正确定义的:

 /**
* @var float
*
* @ORM\Column(name="baths", type="decimal", precision=10, scale=1, nullable=true)
*/
private $baths;

在我的常规形式中:

 ->add('baths', BathsType::class)

引入:

class BathsType extends AbstractType
{


public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'choices' => array_combine(range(1,10,0.5),range(1,10,0.5)),
'label' => 'Bathrooms:',
'required' => false,
'placeholder' => 'N/A',
'choices_as_values' => true,

]);
}

public function getParent()
{
return 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
}


}

最佳答案

您应该只将值传递给您的 choices 选项,它们将被用作“隐藏”html 输入值字符串的数字键索引,这将在幕后进行映射。

然后使用 choice_label 将标签(可见值)设置为转换为字符串的选项:

class BathsType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'choices' => range(1,10,0.5),
'label' => 'Bathrooms:',
'required' => false,
'placeholder' => 'N/A',
'choices_as_values' => true,
'choice_label' => function ($choice) {
return $choice;
},
]);
}

public function getParent()
{
return 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
}
}

关于symfony - 使用带有整数的 ChoiceType 作为选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560235/

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