Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] dos botones submit en el mismo formulario pero distinto action

Estas en el tema de dos botones submit en el mismo formulario pero distinto action en el foro de Symfony en Foros del Web. Hola amigos, tengo la necesidad de que alguien me aclare una duda. Tengo una entidad 'Visita', con los siguientes atributos Código: ............ class Visita { ...
  #1 (permalink)  
Antiguo 22/06/2015, 12:12
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años
Puntos: 2
dos botones submit en el mismo formulario pero distinto action

Hola amigos, tengo la necesidad de que alguien me aclare una duda. Tengo una entidad 'Visita', con los siguientes atributos

Código:
............
class Visita
{
  protected $id;
  protected $venta;
  protected $cliente;
  protected $comentario;
............
y el formulario para insertar nuevas visitas:

Código:
....................
        $builder->add('cliente', 'entity', array(
                    'empty_value' => '-- Seleccionar --',
                    'class' => 'ClienteBundle:Cliente',
                    'property' => 'nomComercial',
                    'label' => 'Cliente',
                    'attr' => array(
                        'class' => 'form-control'
                    )
                ))
                ->add('comentario', 'textarea', array(
                    'label' => 'Comentario',
                    'required' => false,
                    'attr' => array(
                        'placeholder' => 'Breve comentario (opcional)...',
                        'class'       => 'form-control',
                        'rows'        => '10',
                    )
                ))
                ->add('finalizar_sin', 'submit', array(
                    'label' => 'Finalizar sin compra',
                    'attr' => array(
                        'class' => 'btn btn-success'
                    )
                ))
                ->add('finalizar_con', 'submit', array(
                    'label' => 'Finalizar y realizar pedido',
                    'attr' => array(
                        'class' => 'btn btn-success'
                    )
                ));
    }
..................
Como veis, he añadido dos botones 'submit' al formulario con el siguiente objetivo:
- el submit 'Finalizar sin compra' persiste una entidad Visita, marcando el atributo $venta a FALSE. Aquí os muestro el procesamiento para este botón:

Código:
...................
$visita->setVenta(false);
                    
$em->persist($visita);
$em->flush();
                    
$this->addFlash('info', 'La visita ha sido cerrada sin venta');
                    
return $this->redirectToRoute('visita_listado', array(), 301);
.....................
- el submit 'Finalizar y generar pedido' persiste una entidad Visita, marcando el atributo $venta a TRUE, para crear una entidad Pedido y hacer otras operaciones:

Código:
.....................
$visita->setVenta(true);

$em->persist($visita);
$em->flush();

$pedido = new Pedido();
.....................
La vista tiene el siguiente aspecto:

Código:
     <form action="{{ path('visita_nueva') }}" method="POST">
       {{ form_errors(formulario) }}
       
       <div class="form-group">
        {{ form_row(formulario.cliente) }}
       </div>
       
       <div class="form-group">
        {{ form_row(formulario.comentario) }}
       </div>
       
       <div class="form-group">
        {{ form_row(formulario.finalizar_sin) }}
       </div>
       
       <div class="form-group">
        {{ form_row(formulario.finalizar_con) }}
       </div>
       
       {{ form_row(formulario._token) }}
     </form>
El problema es que el método que procesa las visitas me queda muy farragoso y con muchas líneas de código. Me gustaría poder separar de alguna manera el procesamiento y respetar las buenas prácticas. Es decir, que un submit ejecute un 'action' y el otro submit tenga otro 'action', con dos métodos separados en el controlador.

Si alguien puede echarme un cable, le estaré muy agradecido!
  #2 (permalink)  
Antiguo 22/06/2015, 12:19
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: dos botones submit en el mismo formulario pero distinto action

Podrías modificar el action del formulario usando Javascript de modo que agregues un listener a los botones y dependiendo de que botón sea pulsado, el formulario se lance contra una URL u otra.

Como alternativa más standar te recomiendo usar la opción que Symfony2 incluyó en su versión 2.3 que permite comprobar que botón del formulario ha sido pulsado para enviarlo.

http://symfony.com/blog/new-in-symfo...pport-in-forms

Puedes hacer una criba para determinar que botón ha sido pulsado y actuar en consecuencia creando una función para cada método.

Etiquetas: botones, distinto, formulario, submit
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:15.