2012-06-28 33 views
12

我已經在我的應用程序中的實體中定義了以下變量。我有這個,可以通過表單界面更新的其他領域,我希望能夠檢查和取消選中該表單上的這個框。如何讓一個複選框在symfony中爲空?

我可以檢查框並提交表單,但似乎當我取消選中該框時,我無法提交表單。它給了我一個Please check this box if you want to proceed

/** 
* @var boolean $updatesNeeded 
* 
* @ORM\Column(name="updates_needed", type="boolean", nullable=false) 
*/ 
private $updatesNeeded; 

我試圖改變nullable=falsenullable=true和更新的模式,但它似乎並沒有工作。任何想法將不勝感激。

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class BlahType extends AbstractType 
{ 
    /** 
    * @param \Symfony\Component\Form\FormBuilder $builder 
    * @param array        $options 
    */ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add('stuff') 
      ->add('updatesNeeded', 'choice', array('required' => false)) 
      ->add('anothervar'); 
    } 
} 

回答

-3

好吧,似乎我是用我的網站的版本錯誤。所有提到的方法都是有效的,我只想在下面總結它們,以供將來遇到這種問題的任何人使用。

這裏的問題是,HTML5喜歡自行驗證表單,並將required="required"添加到任何表單輸入。通常,這可能是一件有用的事情,但對於複選框等某些內容,您希望可以選擇不選中並在沒有瀏覽器抱怨的情況下提交表單。

有幾種方法可以解決這個問題,有些方法比其他方法更好。

第一種方法是使用HTML5簡單地禁用表單的所有驗證,如官方symfony docs所述。

另一種是在評論中向實體變量添加信息,使得nullable=true。這允許數據庫中的相應列具有空值,這可能會或可能不會符合您的情況。如下所示。

/** 
* @var boolean $varName 
* 
* @ORM\Column(name="var_name", type="boolean", nullable=true) 
*/ 
private $varName; 

最後,在構建表單時,可以使用某些選項在表單中進行驗證。 docs的細節和給出更多的例子,但爲了我們的目的,重要的部分是,你可以設置'required' => false,如下所示。

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class BlahType extends AbstractType 
{ 
    /** 
    * @param \Symfony\Component\Form\FormBuilder $builder 
    * @param array        $options 
    */ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add('stuff') 
      ->add('checkbox_var', 'checkbox', array('required' => false)) 
      ->add('anothervar'); 
    } 
} 

謝謝所有幫助我處理這個問題的人。我希望這能幫助那些在將來處理這些問題的人。

-1

怎麼樣只用nullable=""

+1

這產生了一個相當於使空值等於假的列 – Squazic

25

此錯誤是因爲輸入標有HTML5屬性required="required"。在您的表單類型中,您可以通過在此複選框上將required選項設置爲false來禁用此功能。

$builder->add('updatesNeeded', 'choice', array('required' => false)); 

http://symfony.com/doc/current/book/forms.html#book-forms-html5-validation-disable

+0

我看了一下html,看起來在輸入標籤中有'required =「required」'。但是,這個解決方案似乎沒有爲我做任何事情。我編輯了'Bundle/Form/EntityType.php'文件的'buildForm'函數。這是正確的地方嗎? – Squazic

+0

那將是地方。有沒有其他的領域需要'屬性?錯誤消息是來自chrome還是來自symfony? – MDrollette

+0

其他字段也有'required'屬性。我實際上使用的是Firefox,它來自於此。 – Squazic

相關問題