Простий роутер на рhp - Створюємо ЧПУ

Блог Фрилансера 1 секунд 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']);