以下是现有代码:
表单类型为:
->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
我怎么能做到这一点:
我不是在构建表单时是否应该使用CheckboxType的其他参数。或者我需要添加一些其他代码来转换值。
此外,无法在修改页面中修改该字段。 有没有办法在修改页面中禁用复选框元素,但在创建页面中启用?
非常感谢你的帮助。
答案 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
]);
}
}