if4752
@if4752

Какие проблемы могут возникнуть: router?

Доброго времени!

Собственно весь вопрос выше :-)

class Router
{
...
...
...
    private function __clone() {}
    private function __construct() {}
    
    public static function getInstance()
    {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function init()
    {
        $this->_getUrl();

        if (empty($this->_url[0])) {
            $this->_loadDefaultController();
            return false;
        }

        $this->_loadExistingController();
        $this->_callControllerMethod();
        return true;
    }
...
...
...
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Синглтон там явно лишний. И если роут не определен отображать 404, а не дефолтный контроллер.

Добавлено:

> про дефолтный контроллер чуть подробнее


При запросе "/такой-страницы-у-меня-нет" нужно показать 404. А в вашем же случае все ссылки на несуществующие страницы будут отображать дефолтный контроллер.

> Объясните пожалуйста почему синглтон лишний


Синглтон нужен для получения доступа к инстансу с любого места в приложении. Если бы это был главный контейнер приложения, то да, это имеет смысл. Но для роутера, который выполняется всегда в одном и том же месте в приложении, синглтон не нужен. Вы просто раз вызвали роутер и больше он не нужен: ( new Router() )->init();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Зачем писать велосипеды, когда есть замечательный FastRoute?
Ответ написан
eucalipt
@eucalipt
Самоделкин.
А где описание функции _getUrl() ?
Либо я слепой, либо вы его замаскировали под этими троеточиями.
Просто, если у вас url делится по слешам, то я знаю, где может затаиться ошибка (вангую).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы