динамическая маршрутизация с php фронт-контроллером - PullRequest
0 голосов
/ 08 октября 2011

Я пытаюсь получить имя элемента управления из URL и динамически сопоставить его с правильным контроллером в index.php.

Корень моего приложения: /localhost/app/index.php

Итакв основном, когда я набрал /localhost/app/index.php/home, пытаясь включить home_controller.php.Вот код;

 $parts = array_slice(explode('/',$_SERVER["REQUEST_URI"]),3);
 if(file_exists(dirname(__FILE__)."/controllers/".$parts[0].'_controller.php'))
 {
    include dirname(__FILE__)."/controllers/".$parts[0].'_controller.php';
 }

Работает нормально, если глубина корня приложения равна 3. Он сломался, когда я изменил каталог приложения, например localhost / first / second / app / index.php / home

Поскольку он взрываетсяк 3, $ parts [0] больше не является «домом». Вопрос в том, как я могу обнаружить часть контроллера более эффективным способом?

Ответы [ 2 ]

0 голосов
/ 08 октября 2011

Я использовал переменную $ _SERVER paht_info для вычисления, часть контроллера ..

  $segments = array_slice(explode("/", $_SERVER["PATH_INFO"] ),1);

Нулевой индекс массива $ сегмента - это часть контроллера, а остальные части - это функция. Кстати, вам нужно проверить границы массива и установить или нет path_info.

0 голосов
/ 08 октября 2011

/ локальный / приложение / index.php / дома локальный / первый / второй / приложение / index.php / дома звучит так, как будто ваша строка делает кусок $ parts [0] похожим на app / index.php / home, который будет неверным путем. Единственный способ справиться с этим - либо взорвать эту строку с / в качестве разделителя, либо использовать последний в массиве в качестве места для сравнения или просмотреть каждый из них. Концепция MVC заключается в том, что URL всегда структурирован аналогично первой части, в данном случае требуется home для определения контроллера, обычно используются 2+ в отношении параметров функции из контроллера

...