Контекст текущего запроса в Bitrix D7: \Bitrix\Main\Context, Request и локаль
Зачем нужен Context
В модуле main класс Bitrix\Main\Context описывает один проход скрипта: входящий HTTP-запрос, объект ответа, снимок окружения сервера и привязка к символьному коду сайта и языковым настройкам. Это предпочтительнее сборки данных из разрозненных глобальных массивов: API ядра стабильнее при обновлениях и лучше стыкуется с тестами.
Получить контекст
На практике оба способа ведут к одному активному экземпляру в рамках хита:
use Bitrix\Main\Application;
use Bitrix\Main\Context;
$pageFlow = Context::getCurrent();
$pageFlow = Application::getInstance()->getContext();Выбирайте ту форму записи, которая лучше читается в месте вызова: статический метод короче там, где не нужна ссылка на приложение целиком.
Запрос, ответ и Server
С трёх этих объектов собирают типовые сценарии: параметры строки запроса, установка статусов и заголовков, добавление cookie, доступ к переменным вроде DOCUMENT_ROOT.
$pageFlow = Context::getCurrent();
$httpIn = $pageFlow->getRequest();
$httpOut = $pageFlow->getResponse();
$runtime = $pageFlow->getServer();Подробный разбор HttpRequest логично вынести в отдельную заметку: здесь достаточно помнить, что через getRequest() приходит единый фасад над GET/POST, файлами и cookie.
Сайт и язык
Код текущего сайта и языковой код часто задают фильтры в ORM или выбор вкладок мультисайта:
$pageFlow = Context::getCurrent();
$siteCode = $pageFlow->getSite(); // например s1
$langCode = $pageFlow->getLanguage(); // например ru
$pageFlow->setSite("s1");
$pageFlow->setLanguage("ru");Смену setSite и setLanguage имеет смысл применять осознанно: от выбора сайта зависят пути данных и настройки, а ошибки на этом слое дают неочевидные баги во встраиваемом коде.
Региональные форматы через Culture
Объект Culture хранит шаблоны даты, времени и представления имени. Его можно прочитать и при необходимости подменить только на время обработки фрагмента логики:
use Bitrix\Main\Context;
use Bitrix\Main\Context\Culture;
$pageFlow = Context::getCurrent();
$formats = $pageFlow->getCulture();
$bespokeFormats = new Culture([
"FORMAT_DATE" => "m/d/Y",
"FORMAT_DATETIME" => "m/d/Y H:i:s",
"FORMAT_NAME" => "#LAST_NAME#, #NAME#",
"CHARSET" => "UTF-8",
"DIRECTION" => "Y",
"WEEK_START" => 1,
]);
$pageFlow->setCulture($bespokeFormats);На продакшене избегайте «вечной» подмены культуры глобально без понимания эффекта на типовые компоненты и кешируемые куски шаблонов.
Ответ клиенту
После добавления заголовков и cookie финальный ответ отправляет слой приложения при завершении хита; в одноразовых сценариях с RestartBuffer() важно помнить, что часть уже накопленного вывода может быть потеряна до записи заголовков — это общее правило для PHP, не только для Битрикс.
Смежные темы и осторожности
- В связке с объектом приложения см. общий обзор
ApplicationиContext; там же обычно разбирают соединение с БД и отличие «процесса» от «одного запроса». - В агентах и cron-скриптах HTTP-контекст может быть урезанным: прежде чем читать куки или хост, проверяйте, что сценарий действительно исполняется в веб-окружении.
- Для разбора URL и редиректов используйте специализированные классы ядра вместо ручного склеивания строк из
$_SERVER.
Итог
Context::getCurrent() — короткий вход к getRequest(), getResponse(), getServer(), коду сайта, языку и объекту культуры. Держите эту связку в памяти, и большая часть «инфраструктурных» задач во встройках становится последовательной и переносимой между версиями ядра.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии