无法取消选中Symfony CheckboxType

时间:2017-02-28 08:45:09

标签: checkbox symfony symfony-forms

以下是现有代码:

表单类型为:

->add('isProcessor', CheckboxType::class,array('label' => 'As Processor', 'required'=>false))

实体为:

/**
 * @var boolean $isProcessor
 *
 * @ORM\Column(name="is_processor", type="boolean")
 * @Assert\NotBlank()
 */
private $isProcessor;

页面: enter image description here

我怎么能做到这一点:

  • 如果选中该复选框,则isProcessor应为true
  • 如果未选中该复选框,则isProcessor应为false

我不是在构建表单时是否应该使用CheckboxType的其他参数。或者我需要添加一些其他代码来转换值。

此外,无法在修改页面中修改该字段。 有没有办法在修改页面中禁用复选框元素,但在创建页面中启用?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我认为您只需要删除$ isProcessor上的NotBlank约束。如果未选中复选框,则表单值将为null,布尔类型将其转换为0.

要在修改页面中禁用复选框元素,而不在创建页面中禁用复选框元素,可以使用createForm选项。

在您的控制器中:

$form = $this->createForm(YourType::class, $yourData, [
            'isProcessorDisable'    => true // or false
        ]);

在表单类型中,您可以执行以下操作:

class YourType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $isProcessorDisable = $options['isProcessorDisable'];
        $builder->add('isProcessor', CheckboxType::class, array(
            'label'    => 'As Processor', 
            'required' => false,
            'disabled' => $isProcessorDisable
        ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class'                => YourEntity::class,
            'translation_domain'        => 'form',
            'isProcessorDisable'        => false // Default value
        ]);
    }
}