2017-02-28 37 views
0

以下是現有的代碼:Symfony的CheckboxType不能選中

表格類型爲:

->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應該是假的

我不是是否應該有一些其他參數與CheckboxType建立表單時。或者我需要添加一些其他代碼來轉換值。

此外,無法在修改頁面中修改該字段。 有沒有辦法使修改頁面中的複選框元素禁用,但在創建頁面中啓用?

非常感謝您的幫助。

回答

1

我認爲你只需要刪除$ 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 
     ]); 
    } 
} 
+0

哇!非常感謝您的幫助。它工作正常。許多人再次感謝。 – Bob