Роутер содержит примерно такие маршруты - затем все это разбивается и записывается в массив.
например - если перейти по адресу - news/view
запустится Контроллер News и метод View
Router::add('^(?P<controller>[a-z-]+)/(?P<action>[a-z-]+)$');
Проблема в том, что ссылки становятся вот такими
sandbox.lo/news/view/template/css/reset.css
В адрес добавляется имя контроллера и метода - news/view/, а должно быть
sandbox.lo/template/css/reset.css
причем если в конце адреса не поставить слеш / - news/view в адрес добавится только news/
из-за этого слетают все ссылки на стили и картинки в шаблоне, как это исправить?
P.S. в каком то вопросе скинули код простого роутера, поставил его, но проблема осталась.
код роутера
class Router {
private static $routes = [];
public static $route =[];
private static $url = '';
public static $params = [];
private function setUrl() {
self::$url = trim($_SERVER['REQUEST_URI'], '/');
echo 'REQUEST_URi - '. self::$url;
}
public static function add($regexp, $route = []) {
self::$routes[$regexp] = $route;
}
public static function getRoutes()
{
return self::$routes;
}
public static function matchRoute() {
self::setUrl();
foreach (self::$routes as $regexp => $array) { // in array 'controller' => 'Main', 'action' => 'Index'
if(!empty($array) && preg_match("~$regexp~i", self::$url) ) { // check if array ^ not empty and match array key(regex) with url - post.php(regex key) - post.php(url)
self::$route['controller'] = $array['controller'];
self::$route['action'] = $array['action'];
} else {
if(preg_match("~$regexp~i", self::$url, $matches) ) { // 3 параметр - сохраняем регексы в массив
var_dump($matches);
self::$params['id'] = $matches['id'];
self::$route['controller'] = $matches['controller'];
self::$route['action'] = isset($matches['action']) ? $matches['action'] : 'Default';
echo 'self routes<hr>';
var_dump(self::$route);
}
}//end else
} //end foreach
}
public static function dispatch() {
Router::matchRoute();
$controller = ucfirst(self::$route['controller']).'Controller';
$action = 'action'.ucfirst(self::$route['action']);
echo 'final object<hr>';
var_dump($controller);
var_dump($action);
if(class_exists($controller)) {
$obj = new $controller;
} else {
echo 'controller not found';
}
if(method_exists($controller,$action)) {
$obj->$action();
} else {
echo 'method not found';
}
}
}
Router::add('^$', ['controller' => 'News', 'action' => 'Default' ]);
Router::add('^index.php$', ['controller' => 'News', 'action' => 'Default' ]);
Router::add('^[a-z0-9-]+/[a-z-]+/[0-9]+$', ['controller' => 'News', 'action' => 'One' ]);
Router::add('^(?P<controller>[a-z-/]+)$');
Router::add('^(?P<controller>[a-z-]+)/(?P<id>[0-9]+)$'); // route for pages - page/42