2016-06-03 15 views
1

Ich möchte eine Funktion in meiner Web App hinzufügen, wo Benutzer dieselbe URL aufrufen und je nachdem, ob sie eingeloggt sind oder nicht, unterschiedliche Seiten erhalten. Die Art, wie ich das jetzt mache, benutzt eine Middleware, um angemeldete Benutzer nach/home umzuleiten. Aber ich möchte etwas wie facebook tut tun.Laravel Routes - Gleiche Route, verschiedene Controller

Wenn jemand http://facebook.com tippt, analysiert es, ob die Person angemeldet ist, wenn sie sind, zeigt es ihr Zuhause, wenn sie nicht sind, zeigt es die Registrierungsseite an die gleiche URL (sehen Sie, dass die Adresse in der Leiste ändert sich nicht)

ich versuche, diesen Code auf meiner Route zu verwenden:

Route::get('/', array('as'=>'home', 'uses'=> (Auth::check()) ? "[email protected]" : "[email protected]")); 

hier gefunden: https://stackoverflow.com/a/18896113/2724978

Aber es zeigt nur den zweiten Controller Meth od ("homecontroller @ index") egal ob der Benutzer eingeloggt ist oder nicht.

+0

Warum nicht nur Ihre 'home' Methode, um die Auth Prüfung und Last eines von zwei unterschiedlichen Methoden in der Steuerung durchführt auf dem Ergebnis je? – AJReading

Antwort

0

Ist es nur ich oder können Sie nicht einfach tun, wie @AJReading vorgeschlagen hat und eine normale Controller-Methode verwenden, um damit umzugehen?

wie so ein:

In Ihrem HomeController.php:

class HomeController extends Controller 
{ 
    /** 
    * Show a different view depending on whether or not the user is logged-in. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     if (Auth::check()) { 
      // logged-in 
      return view('home.index.authorised')->with('user', Auth::user()); 
     } else { 
      // not logged-in 
      return view('home.index.guest'); 
     } 
    } 
} 

Dann erstellen Sie Ihre alternative Ansichten z.B. resources/views/home/guest.blade.php

0

hier ist genau das, was Sie wollen:

Route::get('/', function() { 
    $guest = Auth::guest(); 
    if($guest) 
    { 
     $controller = $this->app->make('App\Http\Controllers\TaskController'); 
     return $controller->callAction('guest', $parameters = array());   
    } 
    else 
    { 
     $controller = $this->app->make('App\Http\Controllers\TaskController'); 
     return $controller->callAction('user', $parameters = array());   
    }   

}); 

einfach die Namen mit Ihnen ersetzen. Getestet am: Laravel Framework Version 5.1.35 (LTS).

Sollte weiter verbessert werden, indem man auf den Namensraum schaut. Hat mit Middleware eine bessere Lösung gefunden - aber nicht gespeichert und kann sie jetzt nicht neu erstellen.

Antwort abgeleitet von/auf Basis von: Laravel single route point to different controller depending on slugs http://laravel.io/forum/10-16-2014-l5-controller-does-not-exist

Verwandte Themen