Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/06/2015, 12:12
weltxo
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años, 7 meses
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!