1. Use
HttpFoundation Luke!
2. Ваш роутер, был бы не плох лет эдак 10 назад, но не сейчас, посмотрите роутинг
symfony, или
silex
3. ОБЯЗАТЕЛЬНО читаем: PSR-1, PSR-2, PSR-4
<?php
namespace lib;
class Router {
// Может rules все таки?))
private $rulls; // Зачем тут отступ?
// phpDocumentor - ваш друг, прописывайте ОБЯЗАТЕЛЬНО типы данных.
private $uri;
private $controller;
private $params = [];
function __construct(){
$this->setUri(); // У вас нет такого метода, есть setURI
$this->setController();
$this->setParams();
$this->setRulls();
}
// Что будет, если $_SERVER['REQUEST_URI'] = '/?', или '/////'?
private function setURI(){
// Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
if($_SERVER['REQUEST_URI'] != '/'):
$this->uri = explode('/',trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'));
endif;
}
// Я правильно понимаю, вы хотите сказать, что контроллер - это некий элемент массива (похоже string|null)? Обычно контроллер - это объект...
private function setController(){
$this->controller = array_shift($this->uri);
}
// В этом методе вы по тупому копируете элементы, зачем?
private function setParams(){
// Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
foreach ($this->uri as $value):
$this->params[] = $value;
endforeach;
}
private function setRulls(){
// NO! загрузка данных - это НЕ задача роутера, от слова СОВСЕМ
file_exists(SITE_ROOT.DS.'routing'.DS.'rulls.php') ? $this->rulls = include(SITE_ROOT.DS.'routing'.DS.'rulls.php') : die('Файл с конфигурацией роутинга где-то затерялся, извини.');
}
// В методе ничего нечего спасать, просто удалите его.
public function run(){
// НЕ ИСПОЛЬЗУЙТЕ ГЛОБАЛЬНЫЕ ПЕРМЕННЫЕ
$_REQUEST = array_merge($_REQUEST, $this->params);
$controller = '\\controllers\\'.$this->rulls[$this->controller]['controller'];
$action = $this->rulls[$this->controller]['action'];
$controller = new $controller; // Что будет, если такого класса нет?
$controller->$action(); // Что будет, если такого метода нет?
}
}