7. Как обрабатывается каждый запрос
В упрощенном виде цикл обработки запроса таков...
-
Обрабатывается полученный запрос, из него выделяется адрес страницы, который помещается в переменную $_GET['corePath']. Также из URL выделяется псеводинм языка.
-
Если передан заголовок «Last Modified», то проверяется дата последнего изменения страницы, если страница не была изменена, то выполнение скрипта завершается с кодом 304.
-
Инициализируется сессия.
-
Если пользователь относится к группе с номером 200 или больше, то подключаются библиотеки административного назначения.
-
Создаётся экземпляр класса контроллера. Если такого файла нет, то генерируется ошибка 404.
-
В конструкторе контроллера определяется правильное имя действия, а также проводятся дополнительные преобразования и проверки правильности заданного адреса, созадаётся переменная controller::$url (в ней хранится преобразованный, если в этом есть необходимость, адрес страницы).
-
Если в $_POST есть данные, относящиеся к этому контроллеру, то вызывается submit-действие этого контроллера (это процедура, предназначенная для обработки данных html-форм).
-
Submit-действие может прервать дальнейшую обработку вызвав метод core::redirect (это редирект на другой адрес — если данные форм обработаны правильно, то всегда выполняется редирект).
-
Далее происходит вызов действия контроллера (это процедура, подготавливающая данные для отображения страницы).
-
Действие контроллера подготавливает необходимые данные, подключает каскадные таблицы стилей, скрипты javascript, устанавливает мета теги, а также заголовок страницы, затем возвращает представление.
-
Генерируется событие «beforeRender» (вызывается перед началом вывода каких-либо данных).
-
Если представление — это NULL или FALSE, то никаких данных не выводится, обработка запроса завершается.
-
Если пользователь относится к группе 200 или выше, то подключаются файл стилей и файл javascript, необходимый для отображения административных диалоговых окон.
-
Если мета тег title не был установлен, то используется заголовок страницы.
-
Если это не ajax-запрос, то:
-
Если включён режим отладки, или нет кеша шаблона, то запускается кеширование нужного шаблона.
-
Выводится первая часть html-шаблона (до того места, где должен быть вставлен контент). При этом также обрабатываются все виджеты.
-
Если в шаблоне предусмотрены «хлебные крошки», то проверяется наличие в контроллере процедуры, формирующей хлебные крошки для данного действия. Если такая процедура есть, то она вызывается и на основе полученных данных генерируется html-код хлебных крошек. Если такой процедуры нет, то хлебные крошки формируются по заданному по умолчанию алгоритму.
-
Если пользователь относится к группе пользователей с номером 200 или больше, то выводится html-код всех доступных кнопок административного интерфейса.
-
-
Если полученное от контроллера представление — это строка, то подключается соответствующий файл из директория /view (в этом файле содержится html-код страницы).
-
Если полученное от контроллера представление — это объект, то вызывается метод render() этого объекта, который должен сгенерировать html-код страницы.
-
Если это не ajax-запрос, то выводится вторая часть (после того места, где должен быть контент) шаблона.