Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Datos agregados por Ajax en un formulario Symfony no validan

29 de octubre de 2015

Hola tengo un formulario con FormBuilder con un par de <select> supongamos colores. Cuando genero el formulario le paso la lista de colores, está funcionando bien .

El tema es cuando agrego desde jQuery un color que no está en la lista de forma dinámica, cuando quiero guardar el formulario con ese nuevo color, Symfony no me deja, al no encontrar ese color en la lista original con la cual se creó el formulario.

Vi un par de ejemplos con posibles soluciones pero no los entiendo. ¿alguna idea?

public function addAction(Request $request) {
        $html = \AppBundle\Entity\Blocks::getMenu();
 
        $plans = new Product();
 
        $form = $this->createFormBuilder($plans)
                ->add('name', 'text', array('label' => 'Nombre'))
                ->add('price', 'text', array('label' => 'Precio'))
                ->add('description', 'text', array('label' => 'Detalle'))
                //->add('ean13', 'text', array('label' => 'Ean13'))
                ->add('talle', 'choice', array('choices' => array(
                        '19' => '19',
                        '20' => '20',
                        '21' => '21',
                        '22' => '22',
                        '23' => '23',
                        '24' => '24',
                        '25' => '25',
                        '26' => '26',
                        '27' => '27',
                        '28' => '28',
                        '29' => '29',
                        '30' => '30',
                        '31' => '31',
                        '32' => '32',
                        '33' => '33',
                        '34' => '34',
                        '35' => '35',
                        '36' => '36',
                        '37' => '37',
                        '38' => '38',
                        '39' => '39',
                        '40' => '40',
                        '41' => '41',
                        '42' => '42',
                        '43' => '43',
                        '44' => '44',
                        '45' => '45',
                        '46' => '46',
                        '47' => '47',
                    ), 'multiple' => true,))
                ->add('color', 'choice', array('choices' =>
                    Product::getColoresTotal($plans->getName()
                    //array(
                    //    'amarillo' => 'amarillo',
                    //    'azul' => 'azul',
                    //    'blanco' => 'blanco',
                    //    'coral' => 'coral',
                    //    'fucsia' => 'fucsia',
                    //    'negro' => 'negro',
                    //    'rojo' => 'rojo',
                    //    'turqueza' => 'turqueza',
                    //    'negro' => 'negro',
                    )
                    , 'mapped' => false
                    , 'required' => false
                    , 'multiple' => true,))
                ->add('save', 'submit', array('label' => 'Guardar'))
                ->add('saveAndAdd', 'submit', array('label' => 'Guardar y Agregar uno Nuevo'))
                ->getForm();
 
        $form->handleRequest($request);
 
        if ($form->isValid()) {

Respuestas

#1

Buenas, en symfony no es tan sencillo trabajar con formularios dinamicos, más que nada por una cuestión de seguridad, te pasó un link a un tutorial que explica como trabajar con formularios dinamicos:

http://manuelj555.github.io/2015/04/26/formularios-dinamicos.html

Symfony no me deja, al no encontrar ese color en la lista original con la cual se creó el formulario.. Precisamente este es un tema de seguridad, symfony evita que de manera mal intencionada se envie un valor distinto a los que se establecieron en el campo desde el servidor.

Para lograrlo debes hacer uso de los EventListener de formularios, para hacerle saber al form en el servidor que los datos de un choice cambiaron.

Saludos!

@manuel_j555

29 octubre 2015, 21:02
#2

La respuesta que te da @manuel_j555 es la más correcta y yo la probaría en primer lugar. En cualquier caso, a modo de comentario, también te digo que cuando las cosas relacionadas con los formularios de Symfony se complican demasiado, mi consejo es no utilizar los formularios de Symfony. Si tu aplicación es muy dinámica en la parte del navegador y haces muchas cosas con JavaScript, se te va a complicar muchísimo el manejo de los formularios de Symfony.

@javiereguiluz

29 octubre 2015, 21:19
#3

Gracias por las respuestas ya me pongo a ver este tema... pensé en armarlo a mano pero era una lastima por dos select...

@xub

30 octubre 2015, 12:37