2013-07-29 32 views
8

Ho un controller che ha un metodo. Il codice è troppo lungo nel metodo, quindi ho inserito alcuni dei codici in altri metodi privati, in modo che i metodi diventino comprensibili e non ne creino problemi.Reindirizzamento laravel dal metodo privato

Ora, quando accedo al metodo pubblico dall'URL, in base ai parametri, chiamerà un metodo privato specifico per elaborare il lavoro. Dopo che il lavoro è stato elaborato, desidero reindirizzare a un URL, ma il reindirizzamento non funziona.

un campione del mio codice è il seguente:

class SomeClass extends BaseController{ 
    public function getMethodName() 
     { 
      //check the params and choose a private method to call 
      $this->processJob(); 
     } 
    private function processJob() 
    { 
     //process the job and redirect at the end 
     return Redirect::to('some/url'); 
    } 
} 

Il problema è, quanto sopra reindirizzamento non funziona. Perché? In Codeigniter, quando hai usato redirect funziona come nomatter da cui viene chiamato.

Se il codice di cui sopra non è il modo giusto per farlo, apprezzerebbe se qualcuno potesse mostrarmi come deve essere fatto. Grazie.

+0

dovrebbe funzionare: io uso quel tipo di codice tutto il tempo. Stai riscontrando errori? cosa succede se sposti il ​​reindirizzamento all'inizio di processJob()? – Laurence

+0

Non funziona. Ho rimosso tutti gli altri codici in processJob(), mantenendo solo la riga di reindirizzamento, non funziona ancora. A proposito, sto usando L4. – WebNovice

+0

Sei sicuro che venga chiamato ProcessJob? prova dd ('ciao') in processJob - vedi 'ciao' ?? – Laurence

risposta

14

Anche tu devi restituire il ritorno da $this->processJob() troppo.

class SomeClass extends BaseController{ 
    public function getMethodName() 
    { 
     //check the params and choose a private method to call 
     return $this->processJob(); 
    } 

    private function processJob() 
    { 
    //process the job and redirect at the end 
    return Redirect::to('some/url'); 
    } 
} 
+0

Grazie, ora questo funziona. Venendo da Codeigniter, questo sembra strano però. – WebNovice

+1

guarda in questo modo: Laravel chiama la tua funzione di controller e si aspetta qualcosa in cambio, quindi sa cosa fare dopo. Nel tuo codice, il 'return Redirect :: to ('some/url');' viene restituito ovunque sia stata chiamata la tua funzione privata, ma non raggiunge Laravel. Sì, sembra un po 'stupido, ma in pratica è quello che succede. – mgrueter

2

Puoi provare a reindirizzare a un'altra pagina dalla tua funzione pubblica, in base al risultato della tua funzione privata (penso che sia una soluzione migliore per rendere il tuo codice più leggibile dall'uomo). Ma potrebbe funzionare come lo hai scritto ...

Problemi correlati