Laravel 4 – due pulsanti di invio in una forma, e hanno entrambi sottopone ad essere gestita da diverse azioni

Ho un form di login che ha campi email e password. E devo presentare due pulsanti, uno per il login ( se l’utente è già registrato ) e l’altro per la registrazione ( per i nuovi utenti ). Come l’azione di login e registrazione di azione sono differenti, quindi ho bisogno di qualche modo per reindirizzare la richiesta con tutti i dati del post per la sua azione. C’è un modo per raggiungere questo obiettivo in Laravel 4 in puro Laravel modo?

  • Dare i pulsanti di invio nomi diversi.
InformationsquelleAutor Abhay PS | 2014-01-05

 

5 Replies
  1. 37

    Il modo in cui vorrei farlo

    Se il modulo è (2 pulsanti):

    {{ Form::open(array('url' => 'test/auth')) }}
    {{ Form::email('email') }}
    {{ Form::password('password') }}
    {{ Form::password('confirm_password') }}
    <input type="submit" name="login" value="Login">
    <input type="submit" name="register" value="Register">
    {{ Form::close() }}

    Creare un controller ‘TestController’

    Aggiungere un percorso

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

    In TestController avresti un metodo che verifica che invia è stato cliccato e altri due metodi per il login e registrarsi

    <?php
    
    class TestController extends BaseController {
    
        public function postAuth()
        {
            //check which submit was clicked on
            if(Input::get('login')) {
                $this->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.
        }
    
    }
    ?>
    • Grazie ClickCoder, siete nel posto giusto. Ma ogni idea, come passare i dati di input per Laravel un soggiorno rilassante in un negozio (in) azione senza interferire con la funzionalità ?
    • Se ho capito bene, hai già postLogin e postRegister (o metodi simili) e si desidera semplicemente percorso per eseguire il login o registrarsi. Route::post('test/auth', function() { if(Input::get('login')) { $action = 'postLogin'; } elseif(Input::get('register')) { $action = 'postRegister'; } return App::make('TestController')->$action(); }); fa che aiutare? Avrete tutti l’ingresso in qualsiasi controller in uso.
    • Sì, avete capito bene. Che è esattamente quello che voglio. Cercherò il codice che ti ha dato e ti faccio sapere il risultato. Se solo guardando il codice che posso dire è di andare a lavoro perfetto. Grazie 🙂
    • Grazie ancora, il codice in commento ha funzionato a meraviglia. Questo è esattamente quello che mi serviva. Sembra essere un molto più modo più pulito per ottenere il risultato desiderato. SI SONO IMPRESSIONANTI 🙂
    • Il metodo che ho cercato per lungo tempo. Si prega di prendere il mio upvote, sir.
  2. 3

    La mia soluzione:

    prima ho impostato il modulo con nessuna azione

    <script>
        var baseUrl = "{{ URL::to('/'); }}";   
    </script>
    
    {{ Form::open(array('url' => '', 'id'=> 'test-form')) }}
    {{ Form::text('username') }}
    {{ Form::password('password') }}
    {{ Form::password('confirm_password') }}
    <input type="submit" name="login" id="login" value="Login">
    <input type="submit" name="register" id="register" value="Register">
    {{ Form::close() }}

    per i percorsi (routes.php):

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

    controller (TestController.php)

    public function login(){
        //do something...
    }
    
    public function register(){
        //do something...
    }

    Jquery: (test.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();
    });
    • si salva il mio un sacco di tempo!
  3. 2

    ClickCoder la risposta è perfetta, l’unica cosa che vorrei sostituire, per fare in 100% puro Laravel modo” sarebbe quello di utilizzare il Generatore di Modulo per l’invio pulsanti.

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

    Il primo parametro è l’invio di valore, e si può passare il suo nome nel seguente array di opzioni.

    Così, invece di:

    <input type="submit" name="login" value="Login">
    <input type="submit" name="register" value="Register">

    Faresti:

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

    Se vuoi, si può sfuggire se la dichiarazione del tutto, chiedendo loro di condividere lo stesso nome e fare qualcosa di simile a questo:

    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 po ‘meno di nidificazione, un po’ più di Laravel!

    • Fresco suggerimento, ma non funziona così bene se il valore del pulsante di invio è più di una parola
  4. 0

    Si può fare come segue:

    Tuoi percorsi (routes.php):

    Route::post('post1', array('before' => 'checkForm', 'uses' => '[email protected]'));
    
    Route::get('post2', array('as' => 'post2', 'uses' => '[email protected]'));

    filters.php

    Route::filter('checkForm', function()
    {
        if(Input::has('button2')) {
            return Redirect::route('post2')->withInput();
        } 
    });

    TestController.php

    public function post1(){
            return Input::all();
        }
    
        public function post2(){
            return Input::old();
        }

    Forma: dovrebbe essere nella vostra vista.tuttavia, ho creato una temp forma nel percorso di file per questa risposta.

    Route::get('form2', function() 
    {
          return Form::open(array('url' => URL::to('post1'))).
                 Form::text('name', null).
                 Form::email('email', null).
                 '<button type="submit" name="button1" value="1">submit</button>'.
                 '<button type="submit" name="button2" value="2">submit2</button>'.
               Form::close();
    
    });

    ora sfoglia:

    http://yourDomain/form2

    Si prega di notare: non sono sicuro che questo è l’approccio giusto per consentire a due pulsanti di invio ma lavorare per due pulsanti di invio.

    • Grazie Anam per spiegare così in dettaglio. Volevo sapere, c’è un modo per reindirizzare ad un’azione con tutti gli input ?
    • è possibile reindirizzare con withInput();. Dopo il redirect, è possibile ottenere tutti gli ingressi utilizzando Input::old();. controllare la mia risposta, per esempio.
  5. 0

    Dare i pulsanti di invio nomi diversi, ad esempio

    <button type="submit" name="login">Login</button> 
    <button type="submit" name="signup">Signup</button>

    Nel controllore, semplicemente gestire il login o iscriviti a seconda di quale pulsante è stato inviato. Sarà ancora ottenere tutti i tuoi ingressi, si può fare questo;

    public function postLoginOrSignup(){
    
        $data = Input::all();
    
        if(isset($data['login'])){
            //handle login process
        }
    
        if(isset($data['signup'])){
            //handle singup process
        }
    
    }
    • Grazie per la risposta tempestiva. Questo funziona alla grande ma il vero problema inizia da qui. Ora l’azione desiderata può essere chiamato, ma poi dovrò passare i dati di input come parametro per l’azione. Quindi devo modificare il modo in cui la mia azione riposante opere. Che non voglio. Voglio Laravel riposante store() azione intatto. Qualche idea ?
    • Ciao, scusa, ma io non capisco il commento, per cortesia, puoi approfondire con alcuni esempi di ciò che non si desidera e ciò che si vuole raggiungere.
    • Messo semplicemente, c’è un modo per trasmettere l’Input per l’azione ?

Lascia un commento