2012-06-28 7 views
12

He definido la siguiente variable dentro de una entidad en mi aplicación. Tengo esto, entre otros campos que se pueden actualizar a través de una interfaz de formulario y deseo poder marcar y desmarcar esta casilla en ese formulario.¿Cómo permitir que una casilla esté vacía en Symfony?

Puedo marcar la casilla y enviar el formulario correctamente, pero parece que cuando desactivo la casilla, no puedo enviar el formulario. Me da un Please check this box if you want to proceed.

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

He intentado cambiar nullable=false a nullable=true y actualizar el esquema, pero no parece funcionar. Cualquier idea será altamente apreciada.

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

Respuesta

-3

bien parece que yo estaba usando la versión incorrecta de mi sitio web. Todos los métodos mencionados funcionan, y solo quiero resumirlos a continuación para cualquier persona que se encuentre con tal problema en el futuro.

El problema aquí es que a HTML5 le gusta validar formularios por sí mismo y agrega un required="required" a cualquier entrada de formulario. Por lo general, esto es probablemente una cosa útil, pero para algunas cosas como casillas de verificación, desea la opción de dejarlas sin marcar y enviar el formulario sin que el navegador se queje por el lado del cliente.

Existen varias formas de resolver este problema, algunas mejores que otras.

El primero es simplemente deshabilitar toda validación para el formulario usando HTML5, como se menciona en el symfony docs oficial.

Otra es agregar información a la variable de entidad en los comentarios, haciendo nullable=true. Esto permite que la columna correspondiente en su base de datos tenga valores nulos, que pueden ser o no deseables para su situación. Esto se muestra a continuación.

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

Por último, cuando la construcción de la forma, hay ciertas opciones que se pueden utilizar para la validación de las formas. El detalle docs y dar más ejemplos, pero para nuestros propósitos aquí, la parte importante es que puede establecer 'required' => false, como he mostrado a continuación.

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

Gracias a todas las personas que me ayudaron con este problema. Espero que esto ayude a alguien que tenga que lidiar con este tipo de problemas en el futuro.

-1

¿Qué pasa con sólo usar nullable=""

+1

Esto produce una columna equivalente a hacer que los nulos sean iguales a false – Squazic

25

Este error se debe a que la entrada está marcado con el atributo de HTML 5 required="required". En su tipo de formulario, puede deshabilitarlo estableciendo la opción required en false en esta casilla de verificación.

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

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

+0

Miré el html y parece que hay 'requerido =" obligatorio "' en la etiqueta de entrada. Sin embargo, esta solución no pareció hacer nada por mí. Edité la función 'buildForm' del archivo' Bundle/Form/EntityType.php'. ¿Es ese el lugar correcto? – Squazic

+0

ese sería el lugar. ¿Hay algún otro campo con el atributo 'required'? ¿El mensaje de error proviene de Chrome o de Symfony? – MDrollette

+0

Los otros campos también tienen el atributo 'required'.En realidad estoy usando Firefox y viene de eso. – Squazic

Cuestiones relacionadas