2016-07-12 7 views
0

Derzeit bin ich auf einer kleinen Website. Nachdem sich der Benutzer angemeldet hat, wird er auf seine Profilseite umgeleitet. bis jetzt habe ich die URLs mit dem folgenden Code geroutet:Profil URL mit URL Router

public function route($uri) 
{ 

     $path = $uri; 


     switch ($path) { 
      case '/': 
       return new FrontPageController; 
      case '/login': 
       return new LoginFormPageController; 
      case '/action/login': 
       return new LoginController; 
      case '/register': 
       return new RegisterFormPageController; 
      case '/action/register': 
       return new RegisterController; 
      case '/Profile/' . : 
       return new ProfilePageController; 
      case '/logout': 
       return new LogoutController(); 
      default: 
       echo 'error'; 
     } 
    } 

Aber wie mache ich es von der Profilseite? Das Profil uri sollte wie folgt aussehen: http://example.com/Profile/USERNAME und sollte von überall zugänglich sein. Ich versuchte es mit

case '/Profile/' . $_SESSION['username']: 
       return new ProfilePageController; 

zu tun, aber dann nur der angemeldete Benutzer seine eigene Seite zu sehen. Wie erkennt mein Router, dass nach Profil/einen Benutzernamen eingegeben hat? und wie könnte ich nach dem Login auf die Profilseite gehen? Kann ich zu Profil/routen und den Benutzernamen manuell hinzufügen?

Btw: Ich benutze NGINX pls nicht sagen, wie etwas .htaccess

+0

Derzeit kann Ihre $ route-Variable nur statische Pfade lesen. Sie brauchen einen Weg, um den Pfad params zu extrahieren, wahrscheinlich Regex würde tun. Übergeben Sie dann dieses param-Array an den neuen ProfilePageController-Konstruktor. Sie werden Ihren Pfad params in der Steuerung haben – astroanu

+0

Ich habe noch nie mit Regex gearbeitet ... Gibt es eine andere Lösung ...:/haha ​​.. – lukas

Antwort

0

ändern Sie Ihren Fall ändern können '/ Profil /' Block etwas wie folgt aus:

// check if route matches a pattern. preg_match return true if any matches found 
case preg_match('/\/Profile\/([a-z0-9]+)/', $path, $matches): 

     // we remove the first element 
     $params = array_shift($matches); 

     // pass params to construct 
     return new ProfilePageController($params); 

nun wieder in Ihrem Controller

class ProfilePageController 
{ 
    public function __construct($params) 
    { 
     $userid = $params[0]; 
    } 

}