Мне нужно создать простой механизм маршрутизации, который принимает запрос типа:/foo/bar и переводит его в FooController-> barAction(); Я должен использовать один скрипт в качестве точки доступа для загрузки этих классов контроллеров и методов действий. Я также не могу использовать внешние фреймворки или библиотеки для выполнения этой задачи. Это должно быть выполнено на сервере PHP 5.3 с Apache.Простой проект маршрутизации PHP
Ниже то, что я написал уже, но у меня возникают проблемы при получении его на работу:
class Router {
private static $routes = array();
private function __construct() {}
private function __clone() {}
public static function route($pattern, $callback) {
$pattern = '/' . str_replace('/', '\/', $pattern) . '/';
self::$routes[$pattern] = $callback;
}
public static function execute() {
$url = $_SERVER['REQUEST_URI'];
$base = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
if (strpos($url, $base) === 0) {
$url = substr($url, strlen($base));
}
foreach (self::$routes as $pattern => $callback) {
if (preg_match($pattern, $url, $params)) {
array_shift($params);
return call_user_func_array($callback, array_values($params));
}
}
}
}
Я пытаюсь по крайней мере выполнить свой текущий сценарий, который базируется на другой простой маршрутизатор, но я не могу получить результат с использованием
Router::route('blog/(\w+)/(\d+)', function($category, $id){
print $category . ':' . $id;
});
Router::execute();
Вы предоставили нам длинный список с требованиями и стеной кода, но забыли задать вопрос. – PeeHaa
Я бы посмотрел на существующие проекты. Случайный пример: http://github.com/deceze/Kunststube-Router – deceze
«Я также не могу использовать внешние фреймворки или библиотеки для выполнения этой задачи». но никто не запрещает вам смотреть на их исходный код. Использование библиотеки не просто перетаскивает черный ящик в приложение. И анализ кода - вот что делает программиста хорошим. – mpm