Saltar al contenido

Laravel 4: dos botones de envío en un formulario y ambos envíos deben ser manejados por diferentes acciones

Recuerda que en las ciencias informáticas un problema casi siempere suele tener diferentes resoluciones, no obstante aquí mostramos lo más óptimo y eficiente.

Solución:

La forma en que lo haría

Si su formulario es (2 botones):

 Form::open(array('url' => 'test/auth')) 
 Form::email('email') 
 Form::password('password') 
 Form::password('confirm_password') 


 Form::close() 

Cree un controlador ‘TestController’

Agregar una ruta

Route::post('test/auth', array('uses' => '[email protected]'));

En TestController tendría un método que verifica en qué envío se hizo clic y otros dos métodos para iniciar sesión y registrarse

postLogin(); //if login then use this method
         elseif(Input::get('register')) 
            $this->postRegister(); //if register then use this method
        

        

    public function postLogin()
    
        echo "We're logging in";
        //process your input here Input:get('email') etc.
    

    public function postRegister()
    
        echo "We're registering";
        //process your input here Input:get('email') etc.
    


?>

Mi solución:

primero configuro el formulario sin acción



 Form::open(array('url' => '', 'id'=> 'test-form')) 
 Form::text('username') 
 Form::password('password') 
 Form::password('confirm_password') 


 Form::close() 

para rutas (route.php):

Route::post('test/login', array('uses' => '[email protected]'));
Route::post('test/register', array('uses' => '[email protected]'));

controlador (TestController.php)

public function login()
    //do something...


public function register()
    //do something...

Jquery: (prueba.js)

$('form :submit').on('click', function(event)

    var a = $(this);
    var form = $('form');
    var action = a.attr('id');

    form.attr('action', baseUrl + '/test/' + action);
    form.submit();
);

La respuesta de ClickCoder es acertada, lo único que reemplazaría, para hacerlo de una manera 100% “pura Laravel” sería usar el Creador de formularios para los botones de envío también.

http://laravel.com/docs/4.2/html#buttons

El primer parámetro es el valor del envío y puede pasar su nombre en las siguientes opciones array.

Entonces en lugar de:



Harías:

 Form::submit('Login', ['name' => 'login']) 
 Form::submit('Register', ['name' => 'register']) 

Si lo desea, puede escapar de la declaración if al hacer que compartan el mismo nombre y hacer algo como esto:

html:

 Form::submit('Login', ['name' => 'action']) 
 Form::submit('Register', ['name' => 'action']) 

php:

public function postAuth()

    $action = 'post' . Input::get('action'); //becomes either postLogin or postRegister
    $this->$action();

¡Un poco menos de anidación, un poco más de Laravel!

Nos encantaría que puedieras dar visibilidad a este enunciado si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *