Теперь фронт-контроллер (коммутатор).
В последнем листинге на картинке видно, что я его уже начал делать для наглядности. Остановлюсь на одном важном моменте. Сделан он статическим классом, а не объектом. Статика работает экономичнее, но это не столь важно. Важнее другое.
На мой взгляд нужно использовать те инструменты, которые наиболее подходят к задаче. Дело в том, что этот функционал может быть затребован только один раз. А значит инициировать объект нет никакого смысла. Только ради красного словца.
Конечно, если уж совсем невтерпеж, то можно и объектом, мало что изменится:
(new \Core\FrontController)->run();
Опять же к вопросу свободы выбора. У кого к чему больше лежит душа.
Ну и сам коммутатор. В нем пока только один метод. Его задача выбрать нужный контроллер приложения в зависимости от GET-параметра. Допустим это будет
page:
<?php
namespace Core;
class FrontController
{
public static function run()
{
$page = isset($_GET['page']) ? $_GET['page'] : null;
$page = preg_replace('~[^a-z0-9_]~i', '', $page);
$controllerName = ucfirst(strtolower($page));
$controller = '\App\Controllers\\'. $controllerName .'Controller';
if (class_exists($controller)) {
$controller::run();
} else {
print('404');
}
}
}
Здесь три интересных момента.
Первое. Остальные контроллеры тоже предполагаются статичными. Я на своей практике ни разу не встречал ситуации, чтобы для генерации одной страницы могло потребоваться несколько экземпляров одного контроллера. И представить себе не могу. Ну у кого другое мнение, не вопрос. Можно сделать и его объектом. Я смысла не вижу.
Второе. Там внизу стоит print('404'); Это временно, позже там будет генерация полноценной 404-й страницы.
И главное. Инициализация GET-параметра тернарником напрямую из суперглобального массива. Вот это не есть хорошо. Этим сейчас и озадачимся.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.