2016-07-12 3 views
0

В настоящее время я нахожусь на небольшом веб-сайте. После того, как пользователь вошел в систему, он перенаправляется на страницу своего профиля. до сих пор я не разбила URLs со следующим кодом: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; 

Но только авторизованный пользователь может видеть свою собственную страницу. Как распознать мой маршрутизатор, который после профиля/ввел имя пользователя? и как я мог возглавить после входа на страницу профиля? Могу ли я направить в профиль/и добавить имя пользователя вручную?

Btw: Я использую NGINX пожалуйста не говорите что-то вроде изменения .htaccess

+0

В настоящее время ваша переменная $ route может читать только статические пути. вам нужен способ извлечения параметров пути, возможно, регулярное выражение. затем передайте этот массив param в новый конструктор ProfilePageController. у вас будут параметры вашего пути в контроллере – astroanu

+0

Я никогда не работал с регулярным выражением раньше ... Есть еще одно решение ...:/haha ​​.. – lukas

ответ

0

Вы можете изменить свой случай «/ Профиль /» блок что-то вроде этого:

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

сейчас в вашей контроллер

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

} 
Смежные вопросы