Простой роутер для проекта

StalkerClasses

Новичок
Есть проект, написанный на самописе - корпоративный сайт.
Там нет контроллеров, акшинов и т.д. Весь код в перемешку.

Самая большое неудобство работы с проектом, это то, что есть больше кол-во страниц по Id. На них по record Id и еще с кучей параметров выбираются записи вроде новости и т.д.

Можно как-то создать какой-то url-генератор для таких случаев:

То что получилось на вскидку.

// пример использования
<a href="<?=url('page',3);"?>
<a href="<?=url('articleList');"?>
<a href="<?=url('articleDetailt', 5);"?>

// пример конфигурации
return [
'page' => ['id'],
'pageType' => ['type'],
'rssNews' => ['!id'=>0,'type'=>100], // !id=0,type=100
'articleList' => ['id'=>55] // id=55
'articleDetail' => //id{55}|record_id{}
'specialistList' => ''
'eIdAjax' =>
'ajax' =>
];

isUrl('articleList') // пример проверки - это текущий машршурт по ключу?
urlCurrent() // возвращяет текущий ключ маршрута
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Тебе роутер или генератор ссылок?
 

StalkerClasses

Новичок
Скорее всего это получается генератор ссылок а не роутерт. Т.к. он не будет отвечать за запуск того или иного экшн.
Также нужна поддержка двух функций:
isUrl('articleList') // пример проверки - это текущий URL по ключу правила?
urlCurrent() // возвращяет текущий ключ URL .

Не хотелось бы велосипедов изобретать.
 

Adelf

Administrator
Команда форума
Скорее всего это получается генератор ссылок а не роутерт. Т.к. он не будет отвечать за запуск того или иного экшн.
если у тебя не хватает, чтобы понять всю несуразность этого, то тебе сложно помочь. у этих двух вещей сильная связность. их разделение - признак непродуманности.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Генератор ссылок без роутера как такового, как уже намекнул @Adelf, не имеет ценности чуть более, чем полностью.
 

WMix

герр M:)ller
Партнер клуба
PHP:
class Router {
   
    private static $routes = [];
   
    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));
            }
        }
    }
}
PHP:
Router::route('blog/(\w+)/(\d+)', function($category, $id){
  print $category . ':' . $id;
});
Router::execute($_SERVER['REQUEST_URI']);
Код:
/blog/php/312
 
Сверху