Маршрутизация, имеет ли такой подход право быть? В попытках реализовать первый проект на mvc паттерне столкнулся с проблемой роутинга. В итоге проблему нужно было решать, немного погуглив, поспрашивав там и тут, додумал такое вот решение:setUri(); $this->setController(); $this->setParams(); $this->setRulls(); } private function setURI(){ if($_SERVER['REQUEST_URI'] != '/'): $this->uri = explode('/',trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/')); endif; }
private function setController(){ $this->controller = array_shift($this->uri); }
private function setParams(){ foreach ($this->uri as $value): $this->params[] = $value; endforeach; }
private function setRulls(){ 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(); } } ?>
Все вроде как работает, но мб есть более очевидное решение или это не соответствует сегодняшним реалиям в данном вопросе. Хотелось бы услышать объективную критику, и если есть куда копать(а я просто убежден в том, что есть), мб подскажите?
Конечно, могу поделиться своим мнением о вашем подходе к роутингу.
В целом, ваш класс Router выполнен в рамках принципов MVC и понятен в использовании. Однако, есть несколько моментов, на которые стоит обратить внимание:
Использование глобальной переменной $_REQUEST для передачи параметров не является лучшей практикой. Рекомендуется использовать более явные методы передачи параметров, например, через методы контроллера или через URI.
Хранение правил маршрутизации в отдельном файле конфигурации - хорошая практика. Однако, возможно стоит добавить проверку на существование нужных параметров в массиве $rulls.
Может быть стоит добавить обработку случая, когда запрашиваемый контроллер или действие не найдены в конфигурации, чтобы предотвратить появление ошибок.
Рекомендуется добавить более подробные комментарии к методам класса, чтобы было проще понять их назначение.
В целом, ваш подход к роутингу вполне рабочий и соответствует принципам MVC. Однако, улучшения можно внести для повышения читаемости и надежности кода. Будет полезно изучить более продвинутые решения и фреймворки для маршрутизации, чтобы получить дополнительные идеи и улучшить свой код. Надеюсь, мои комментарии были полезными для вас.
Конечно, могу поделиться своим мнением о вашем подходе к роутингу.
В целом, ваш класс Router выполнен в рамках принципов MVC и понятен в использовании. Однако, есть несколько моментов, на которые стоит обратить внимание:
Использование глобальной переменной $_REQUEST для передачи параметров не является лучшей практикой. Рекомендуется использовать более явные методы передачи параметров, например, через методы контроллера или через URI.
Хранение правил маршрутизации в отдельном файле конфигурации - хорошая практика. Однако, возможно стоит добавить проверку на существование нужных параметров в массиве $rulls.
Может быть стоит добавить обработку случая, когда запрашиваемый контроллер или действие не найдены в конфигурации, чтобы предотвратить появление ошибок.
Рекомендуется добавить более подробные комментарии к методам класса, чтобы было проще понять их назначение.
В целом, ваш подход к роутингу вполне рабочий и соответствует принципам MVC. Однако, улучшения можно внести для повышения читаемости и надежности кода. Будет полезно изучить более продвинутые решения и фреймворки для маршрутизации, чтобы получить дополнительные идеи и улучшить свой код. Надеюсь, мои комментарии были полезными для вас.