2012-06-28 5 views
12

Ho definito la seguente variabile all'interno di un'entità nella mia applicazione. Ho questo, tra gli altri campi che possono essere aggiornati tramite un'interfaccia del modulo e vorrei poter controllare e deselezionare questa casella su quel modulo.Come consentire a una casella di controllo di essere vuota in symfony?

Posso controllare la casella e inviare il modulo correttamente, ma sembra che quando deseleziono la casella, non posso inviare il modulo. Mi dà un Please check this box if you want to proceed.

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

Ho provato a cambiare nullable=false-nullable=true e l'aggiornamento dello schema, ma non sembra funzionare. Qualsiasi idea sarebbe molto apprezzata.

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'); 
    } 
} 

risposta

-3

Va bene sembra che stavo usando la versione sbagliata del mio sito. Tutti i metodi citati funzionano, e voglio solo riassumerli sotto per chi si imbatte in un problema del genere in futuro.

Il problema qui è che a HTML5 piace convalidare moduli da solo e aggiunge un modulo required="required" a qualsiasi modulo. Di solito, questa è probabilmente una cosa utile, ma per alcune cose come le checkbox, si vuole la possibilità di lasciarle deselezionate e di inviare il modulo senza che il browser si lamenti dal lato client.

Ci sono diversi modi per risolvere questo problema, alcuni meglio di altri.

Il primo è semplicemente disabilitare tutte le convalide per il modulo utilizzando HTML5, come indicato dallo symfony docs ufficiale.

Un altro è aggiungere informazioni alla variabile entità nei commenti, rendendo nullable=true. Ciò consente alla colonna corrispondente nel tuo database di avere valori nulli, che possono o non possono essere desiderabili per la tua situazione. Questo è mostrato sotto.

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

Infine, quando si crea il modulo, ci sono alcune opzioni che è possibile utilizzare per la convalida nei moduli. Il dettaglio docs e dare altri esempi, ma per i nostri scopi qui, la parte importante è che è possibile impostare 'required' => false, come ho mostrato di seguito.

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'); 
    } 
} 

Grazie a tutte le persone che mi hanno aiutato con questo problema. Spero che questo aiuti qualcuno che deve affrontare questo tipo di problemi in futuro.

-1

Che dire solo utilizzando nullable=""

+1

Questo produce una colonna equivalente a rendere nullable uguale a false – Squazic

25

Questo errore perché l'ingresso è contrassegnato con l'attributo HTML5 required="required". Nel tuo tipo di modulo puoi disabilitare questo impostando l'opzione required su false su questa casella di controllo.

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

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

+0

Ho guardato l'html e sembra che ci sia 'required =" required "' nel tag di input. Tuttavia, questa soluzione non sembrava fare nulla per me. Ho modificato la funzione 'BuildForm' di' Bundle/Form/EntityType.php'. È il posto giusto? – Squazic

+0

quello sarebbe il posto. ci sono altri campi con l'attributo 'required'? Il messaggio di errore viene visualizzato da chrome o da symfony? – MDrollette

+0

Anche gli altri campi hanno l'attributo 'required'.In realtà sto usando Firefox e ne viene fuori. – Squazic

Problemi correlati