小编Kri*_*ite的帖子

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

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

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

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

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

 "baths" => array:2 [?
    0 => 1.5
    1 => "1.5"
  ]
Run Code Online (Sandbox Code Playgroud)

这导致监听器始终触发我的钩子,即使该值确实没有更改。如果我将表单类型更改为Integer,那只是一个文本输入,而我的下拉菜单也会丢失。您如何强制下拉ChoiceType将数字视为数字?

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

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

以我的常规形式:

 ->add('baths', BathsType::class)
Run Code Online (Sandbox Code Playgroud)

引入:

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';
    }


}
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony

1
推荐指数
1
解决办法
2335
查看次数

标签 统计

symfony ×1

symfony-forms ×1