Супер-компактный клас для роутринга
<?php
/*
* Route.php
*/
class Router
{
// массив для хранения соответствия url => функция
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)
{
foreach (self::$routes as $pattern => $callback)
{
if (preg_match($pattern, $url, $params))
{
array_shift($params);
return call_user_func_array($callback, array_values($params));
}
}
}
}
.htaccess
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L,QSA]
Как использовать index.php
require 'router.php'; // Подключаем класс
Router::route('/', function(){
// главная страничка
});
// example.com/products/shkafy/test
Router::route('/products/(\w+)/(\w+)', function($categoty,$product){
//$categoty - shkafy
//$product - test
});
Router::execute($_SERVER['REQUEST_URI']);
Вы должны авторизоваться, чтобы оставлять комментарии.
коммент.