Checkboxtype不会根据相关对象更改值

时间:2018-09-19 07:26:06

标签: forms symfony checkbox

我有一个Measure类,其布尔属性名为“ isShared”

/**
 * @ORM\Entity(repositoryClass="App\Repository\MeasureRepository")
 * @UniqueEntity("name", message = "This value is already used")
 */
class Measure
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(name="is_shared", type="boolean")
     */
    private $isShared;
}

还有一种形式,其中应通过复选框更改isShared属性值的值。

class MeasureType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('isShared', CheckboxType::class, array(
                'required' => false,
                'label' => 'Shared',
                'attr' => array(
                    'data-on-color' => 'primary',
                    'data-off-color' => 'default'
                )
            ));
}

问题在于,呈现的html始终是

<input type="checkbox" id="measure_isShared" name="measure[isShared]" data-on-color="primary" data-off-color="default" value="1" /> Shared</label>

不考虑对象中属性的值。当我将属性isShared设置为false的Measure对象传递给表单时,输入的值始终为1。

我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:2)

如果我没记错的话,应该复选框的值始终为1

实际上,如果未选中,则浏览器将完全跳过发送属性mesure[isShared],而您的FormType可以得出结论,用户未检查该字段。不发送值而发送0会有所不同

想到一种将一些任意信息(不仅仅是二进制0 / 1)传输到服务器的方法。例如,在choice(当然还有expandedmultiple的情况下,value将包含这些值,但是只有其中一些会被提交回服务器。

提示:提交表单后,您是否尝试过转储Measure对象?

希望这对您有帮助...