isvalid form component symfony symfony-forms

symfony - form - Omitir validación si el campo hermano(casilla de verificación) contiene ''falso''



symfony using form (2)

Tengo un formulario que contiene una casilla de verificación y un "campo de valor". El campo de valor puede ser cualquier cosa, un cuadro de texto, un campo compuesto, una colección, cualquier cosa.

El formulario podría verse así, por ejemplo:

field_1_label enabled [x] value [________] field_2_label enabled [x] value sub_field_1 [________] sub_field_2 [________] field_3_label enabled [x] value [________]

Cuando el campo "habilitado" contiene true , todo funciona bien. Cuando el campo "habilitado" contiene false , me gustaría deshabilitar la validación en el campo de valor y sus campos secundarios .

Entonces, cuando "habilitado" esté desmarcado, efectivamente ignoraré el campo. Todavía lo mostraré en el formulario, pero no almacenaré los datos y ciertamente no quiero que se valide.

¿Alguien tiene sugerencias sobre cómo podría hacer esto? Específicamente, estoy teniendo problemas para que el sistema de validación ignore el campo de valor y cualquier posible campo secundario.


En Symfony 2.3 puedes usar false en validation_groups para no tener restricciones aplicadas:

http://symfony.com/doc/current/book/forms.html#groups-based-on-the-submitted-data

Por ejemplo, en el campo que contiene la casilla de verificación y el campo de valor:

public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver ->setDefaults([ ''validation_groups'' => function(FormInterface $form) { // If the form is disabled, don''t use any constraints if ($form->get(''enabled_checkbox'')->getData() == false) { return false; } // Otherwise, use the default validation group return ''Default''; } ]); }


Simplemente elimine los campos secundarios antes de la validación si la casilla de verificación de los padres está configurada como falsa.

Lea más en el artículo del libro de cocina Cómo modificar dinámicamente formularios mediante eventos de formulario .

Suscríbase para formar eventos FormEvents::POST_SET_DATA y elimine el campo en su suscriptor.

La sección Agregar un suscriptor de evento a una clase Fom cubre este tema.

También puede presentar diferentes grupos de validación para su formulario.

Simplemente aplique otro grupo de validación (que no contenga los campos del campo) si la casilla de verificación del padre está configurada como falsa.