[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Инфраструктура
twin
Оглавление.

В сборке библиотек инфраструктура минимальна. Автолоадер мы уже сделали, теперь нужно создать комфортные условия для разработки. А именно озаботиться дебаггингом.

Для этого конечно есть интерпретатор, который показывает ошибки. Есть даже Xdedug. Но их не всегда достаточно, особенно для отлова логических казусов в процессе исполнения скрипта.

Многие пишут свои хандлеры, либо берут и адаптируют готовые. Могу предложить свою разработку. Взять её можно здесь, либо на гитхабе.

Работает крайне просто. Нужно подключить его в индекс и он выловит все ошибки, вплоть до синтаксических и фатальных, а так же неотловленные эксепшены и trigger_error(), поместив вот в такие таблицы:

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Обратите внимание, что дебаггер может подключается выше автолоадера, он ему не нужен. А вот сам автолоадер будет отдебажен.

Ну и еще пара моментов. Чтобы отключить режим отладки, нужно определить константу BUGSNARE со значением false.
<?php

// Отключение режима отладки.
define('BUGSNARE', false);
include_once __DIR__ .'/../vendor/PhpBugsnare/setup.php';
Если выставить true, режим будет включен. Дебаггер требует накладных расходов, да и не дело показывать ошибки пользователю. Так что на боевой версии его лучше отключать.

И еще один момент. После подключения доступна функция dbg().

Аргументом может принимать как переменные, так и вызовы функций и методов. В отчете будет стек прохождения логической цепочки с локальными участками кода.

Можно так же посмотреть содержимое объекта и даже структуру класса, если передать аргументом его полное название.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Теперь фронт-контроллер (коммутатор).

В последнем листинге на картинке видно, что я его уже начал делать для наглядности. Остановлюсь на одном важном моменте. Сделан он статическим классом, а не объектом. Статика работает экономичнее, но это не столь важно. Важнее другое.

На мой взгляд нужно использовать те инструменты, которые наиболее подходят к задаче. Дело в том, что этот функционал может быть затребован только один раз. А значит инициировать объект нет никакого смысла. Только ради красного словца.

Конечно, если уж совсем невтерпеж, то можно и объектом, мало что изменится:
    (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-параметра тернарником напрямую из суперглобального массива. Вот это не есть хорошо. Этим сейчас и озадачимся.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.