Блог Фрилансера
22 вер. 2020 р.
Простий роутер на рhp - Створюємо ЧПУ
Супер-компактний клас для роутрингу
функція
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']);