122  /  380
Справочник

Приложения и контекст

Просмотров: 39628
Дата последнего изменения: 26.05.2021
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Приложение - это объект, отвечающий за инициализацию ядра.

Приложение является базовой точкой входа (маршрутизатором) для обращения к глобальным сущностям ядра: соединение с источниками данных, управляемый кеш и т.п. Также приложение содержит глобальные данные, которые относятся к самому сайту и не зависят от конкретного хита. То есть, приложение является неизменяемой частью, не зависящей от конкретного хита.

Любой конкретный класс приложения является наследником абстрактного класса Bitrix\Main\Application.

Конкретный класс Bitrix\Main\HttpApplication отвечает за обычный http-хит на сайте.

Приложение поддерживает шаблон Singleton (Одиночка). Т.е. в рамках хита существует только один экземпляр конкретного типа приложения. Его можно получить инструкцией

$application = Application::getInstance();

Контекст - это объект, отвечающий за конкретный хит. Он содержит запрос текущего хита, ответ ему, а также серверные параметры текущего хита. То есть это изменяемая часть, зависящая от текущего хита.

Любой конкретный класс контекста является наследником абстрактного класса Bitrix\Main\Context. Осуществляется поддержка двух конкретных классов контекста: Bitrix\Main\HttpContext и Bitrix\Main\CliContext. Конкретный класс Bitrix\Main\HttpContext отвечает за обычный http-хит на сайте.

Чтобы получить контекст выполнения текущего хита, можно воспользоваться кодом

$context = Application::getInstance()->getContext();

Если было инициализировано приложение типа Bitrix\Main\HttpApplication, то этот вызов вернет экземпляр контекста типа Bitrix\Main\HttpContext.

Контекст содержит в себе запрос текущего хита. Для того, чтобы получить запрос, можно воспользоваться кодом:

$context = Application::getInstance()->getContext();
$request = $context->getRequest();

Примечание: везде в примерах используется полная форма записи (иногда без указания пространств имен), позволяющая получить результат из любой точки кода. Но для данной конкретной точки кода могут существовать сокращенные формы для доступа к результату.

Запрос представляет собой экземпляр класса, являющегося наследником класса Bitrix\Main\Request. В случае обычного http-запроса запрос будет являться экземпляром класса Bitrix\Main\HttpRequest, расширяющего Bitrix\Main\Request. Этот класс является по сути словарем, предоставляющим доступ к парам "ключ-значение" входящих параметров.

Для того чтобы обратиться к входящему параметру, переданному методами GET или POST, можно использовать код:

$value = $request->get("some_name");
$value = $request["some_name"];

Примечание: Код $value = $request["some_name"]; возвращает строку, которая прошла уже фильтры модуля безопасности. Однако это не говорит о ее безопасности, всё зависит от того, что с ней необходимо делать дальше.

Другие полезные методы запроса:

$value = $request->getQuery("some_name");   // получение GET-параметра
$value = $request->getPost("some_name");   // получение POST-параметра
$value = $request->getFile("some_name");   // получение загруженного файла
$value = $request->getCookie("some_name");   // получение значения кука
$uri = $request->getRequestUri();   // получение запрошенного адреса
$method = $request->getRequestMethod();   // получение метода запроса
$flag = $request->isPost();      // true - POST-запрос, иначе false

64
Курсы разработаны в компании «1С-Битрикс»

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