2016-04-14 4 views
0

Как я могу получить URL-адрес для оператора switch? Я попробовал $_SERVER['REQUEST_URI'], но не могу заставить его работать. Пример:Получить сайт uri for switch statment

$aPage = 'app/views/home.php'; 
      switch($_SERVER['REQUEST_URI']) 
      { 
       case "home": 
        $aPage = "app/views/home.php"; 
        break; 

       case "how": 
        $aPage = "app/views/how.php"; 
        break; 

      } 

      return $aPage; 

Так что на корне показывает: $aPage = 'app/views/home.php (что он делает)

Если URL был http://localhost/how/ было бы вернуть $aPage = "app/views/how.php".

Сейчас я получаю 404 Запрошенный URL/how/не найден на этом сервере.

+1

HTTP: // PHP. net/manual/en/function.parse-url.php – AbraCadaver

+0

Сделайте 'var_dump'' $ _SERVER ['REQUEST_URI'] ', и вы, вероятно, увидите, что он включает в себя косые черты и т. д. –

+0

У вас есть файл .htaccess, который указывает на ваш index.php? – cmorrissey

ответ

0

Проблема в том, что вы затем переходите к URL-адресу http://localhost/how/ и просто пытаетесь найти каталог на сервере с надписью «how» и не находите его. Это называется маршрутизацией, и ее обычно обрабатывают с использованием правила перезаписи. Вот основная идея:

  • Пользователь попадает в ваш файл index.php без строки запроса и получает файл по умолчанию. Как правило, ваш сервер не будет показывать index.php в адресной строке, потому что он просто загрузит любой файл с надписью «index».
  • При загрузке нового шаблона вы добавляете его как параметр строки запроса. Что-то вроде http://localhost.com/?view=how
  • В файле PHP вы можете получить эту переменную с помощью $_GET Название переменной и сделать вашу логику (включить файл, изменить выход и т.д.)

Затем нужно добавить правило перезаписи на сервер. С apache, который делается путем добавления файла с именем .htaccess в корень вашего сервера. Добавьте это внутри этого файла:

RewriteEngine On 
RewriteRule ^([^/d]+)/?$ index.php?view=$1 [QSA] 

Это будет считать, что URL и обновлять его так, что он выглядит как http://localhost/how/ в адресной строке, но интерпретируется PHP как имеющий параметр строки запроса на основной файл индекса. Что касается вашего коммутатора заявление он изменял выглядеть примерно так:

$aPage = 'app/views/home.php'; 
switch($_GET['view']) { 
    case "home": 
     $aPage = "app/views/home.php"; 
     break; 
    case "how": 
     $aPage = "app/views/how.php"; 
     break; 
} 

return $aPage; 

Хотя это может быть проще просто иметь вашу функцию логики, чтобы быть больше, как это:

$route = $_GET['view'] ? $_GET['view'] : 'home'; // if view exists set it, if not default to 'home' 
$validRoutes = array('home', 'how'); // array of acceptable routes 

if(in_array($route, $validRoutes)) { 
    return sprintf('app/views/%s', $route); 
} 

return false; // return false if invalid 
Смежные вопросы