无法取消选中 Symfony CheckboxType
Symfony CheckboxType could not be unchecked
现有代码如下:
表单类型为:
->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 应该为真
- 如果复选框未选中,isProcessor 应为 false
我不是在构建表单时是否应该有一些其他参数与 CheckboxType 。或者我需要添加一些其他代码来转换值。
也无法在修改页面修改该字段。
有什么方法可以使复选框元素在修改页面中禁用但在创建页面中启用?
非常感谢您的帮助。
我认为您只需删除 $isProcessor 上的 NotBlank 约束。如果未选中复选框,则表单值为空,布尔类型将其转换为 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
]);
}
}
现有代码如下:
表单类型为:
->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 应该为真
- 如果复选框未选中,isProcessor 应为 false
我不是在构建表单时是否应该有一些其他参数与 CheckboxType 。或者我需要添加一些其他代码来转换值。
也无法在修改页面修改该字段。 有什么方法可以使复选框元素在修改页面中禁用但在创建页面中启用?
非常感谢您的帮助。
我认为您只需删除 $isProcessor 上的 NotBlank 约束。如果未选中复选框,则表单值为空,布尔类型将其转换为 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
]);
}
}