Задать вопрос
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 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Синглтон там явно лишний. И если роут не определен отображать 404, а не дефолтный контроллер.

Добавлено:

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


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

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


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

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

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