Маленький, простенький маршрутизатор на PHP.
Код файлу router.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?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) { 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
1 2 3 |
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php [L] |
Він переадресовує всі запити на сторінку index.php, де їх вже буде опрацьовувати наш маршрутизатор.
Використання…
Код файлу index.php
1 2 3 4 5 6 7 |
Router::route('blog/(\w+)/(\d+)', function($category, $id) { print $category . ':' . $id; } ); Router::execute($_SERVER['REQUEST_URI']); // Якщо URL буде такою https://example.com/blog/php/312 то скріпт виведе "php:312"... |
Джерело: upshots
Дякую, допомогло. Це не найпростіший можливий роутер( є наприклад http://codehero.pp.ua/post/18 ), але можливо найзручніший.