2016-07-12 13 views
0

現在、私は小さなウェブサイトにいます。 ユーザーはログインした後、プロフィールページにリダイレクトされます。 今まで、私は次のコードでURLをルーティングした:URLを持つプロフィールURL

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'; 
     } 
    } 

しかし、私は、プロフィールページで、それをどのように行うのですか? プロファイルuriは次のようにする必要があります。http://example.com/Profile/USERNAMEどこからでもアクセス可能です。 私は

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

でそれを行うにはしかし、その後のみログインしたユーザーが自分のページを見ることができます試してみました。 プロファイル/がユーザ名を入力した後、私のルータを認識する方法は? 、プロフィールページへのログイン後にどうすればいいですか? Profile /にルーティングして、手動でユーザー名を追加できますか?ところで

:バックあなたの中に今

// 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); 

:私はあなたがこのような何かにあなたのケース「/プロフィール/」ブロックを変更することができます.htaccessの

+0

現在、$ route変数は静的パスのみを読み取ることができます。パス正規表現を抽出する方法が必要です。たぶんregexはそうするでしょう。これらのパラメータ配列を新しいProfilePageControllerコンストラクタに渡します。あなたはあなたのパスパラメータをコントローラに持っています – astroanu

+0

前に正規表現で作業したことはありません...別の解決法がありますか:/ haha​​ .. – lukas

答えて

0

を変更するようなことを言っていないplsはnginxのを使用コントローラ

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

} 
関連する問題