2015-06-19 15 views
5

In laravel, un determinato URL viene instradato a un metodo di controller specifico. All'interno di questo metodo, voglio restituire la risposta come se l'utente avesse visitato un percorso diverso. Posso fare questo in questo modo:Come reinstradare internamente una chiamata laravel (senza reindirizzamento)?

return App::make('OtherController')->otherMethod(); 

Tuttavia, che dipende dal mio hardcoding i nomi delle classi e il metodo che voglio mandarli a. Preferirei inviarli a un altro controller identificato dal nome della rotta, piuttosto che al nome della classe controller. Come lo posso fare?

Una possibilità è a return Redirect::route($otherRoute), tranne che a) questo è un reindirizzamento effettivo, il che significa che si aggiunge al tempo di caricamento della pagina e sostituisce l'URL che vedono, e b) rende difficile trasferire i dati POST. Quindi, non voglio farlo.

Come posso chiamare un controller, conoscendo solo il nome del percorso a cui è collegato?

+0

in laravel 5 uso $ request = Richiesta :: creare ('/ interno/posizione', 'Get'); $ response = Route :: dispatch ($ request); – Mruf

+0

Funziona anche con Laravel 4. Route :: get ('events', ['as' => 'events', function() { \t \t $ request = Request :: create (URL :: toSite ('lp/events'), 'GET '); \t \t percorso di ritorno :: dispatch ($ richiesta); \t}]); –

risposta

0

Come ha detto @Mruf, si potrebbe provare:

return \Route::dispatch(\Request::create($otherRoute, 'GET')); 
+0

Quando lo uso su un clinet remoto, viene visualizzato l'errore non trovato. Se dd ($ otherroute) viene visualizzato il percorso corretto. Quando eseguo il copia-incolla del percorso scaricato nel browser sul server, funziona. Eventuali suggerimenti? – davejal

Problemi correlati