Заказать звонок
Логин
Пароль
Логин
Пароль

ОБЪЕКТЫ APPLICATION И CONTEXT В БИТРИКС D7

01.06.2021

Названия классов в примерах сокращены, поэтому используем use:

use Bitrix\Main\Application, 
    Bitrix\Main\Context, 
    Bitrix\Main\Request, 
    Bitrix\Main\Server;

Bitrix\Main\Application

Из документации:

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

Объект приложения, которые можно получить так:

$application = Application::getInstance();

Из класса приложения можно получить, например, соединение с БД и document_root:

$docRoot = Application::getDocumentRoot();
$connection = Application::getConnection();

Bitrix\Main\Context

При инициализации приложения создаётся контекст:

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

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

$context = Application::getInstance()->getContext();
// Или более краткая форма:
$context = Context::getCurrent();

Контекст содержит много полезной информации о запросе, сервере, сайте, языке.

$request = $context->getRequest(); // объект Request
$server = $context->getServer();   // объект Server
$siteId = $context->getSite();     // ID текущего сайта ("s1")
$langId = $context->getLanguage(); // ID текущего языка ("ru")

Bitrix\Main\Request

Объект запроса позволяет получить данные о текущем запросе: метод и протокол, запрошенный URL, переданные параметры и т.п.

$request = $context->getRequest();
// Или более краткая форма:
$request = Context::getCurrent()->getRequest();

Параметры запроса:

$value = $request->get("param");       // получение параметра GET или POST
$value = $request["param"];            // получение параметра GET или POST
$value = $request->getQuery("param");  // получение GET-параметра
$values = $request->getQueryList();    // получение списка GET-параметров
$value = $request->getPost("param");   // получение POST-параметра
$values = $request->getPostList();     // получение списка POST-параметров
$value = $request->getFile("param");   // получение загруженного файла
$values = $request->getFileList();     // получение списка загруженных файлов
$value = $request->getCookie("param"); // получение значения кука
$values = $request->getCookieList();   // получение списка кукисов

Метод и протокол запроса:

$method = $request->getRequestMethod(); // получение метода запроса
$flag = $request->isGet();              // true - GET-запрос, иначе false
$flag = $request->isPost();             // true - POST-запрос, иначе false
$flag = $request->isAjaxRequest();      // true - AJAX-запрос, иначе false
$flag = $request->isHttps();            // true - HTTPS-запрос, иначе false

Данные о запрошенной странице:

$flag = $request->isAdminSection();            // true - находимся в админке, иначе false
$requestUri = $request->getRequestUri();       // Запрошенный адрес (напр. "/catalog/category/?param=value")
$requestPage = $request->getRequestedPage();   // Запрошенная страница (напр. "/catalog/category/index.php")
$rDir  = $request->getRequestedPageDirectory();// Директория запрошенной страницы (напр. "/catalog/category")

Bitrix\Main\Server

Объект сервера позволяет получить информацию из суперглобального массива $_SERVER, а также некоторую другую информацию.

$server = $context->getServer();
// Или более краткая форма:
$server = Context::getCurrent()->getServer();
$server->getDocumentRoot(); // DOCUMENT_ROOT
$server->getPersonalRoot(); // BX_PERSONAL_ROOT ("/bitrix")
$server->getHttpHost();     // HTTP_HOST 
$server->getServerName();   // SERVER_NAME 
$server->getServerAddr();   // SERVER_ADDR 
$server->getServerPort();   // SERVER_PORT 
$server->getRequestUri();   // REQUEST_URI 
$server->getRequestMethod();// REQUEST_METHOD 
$server->getPhpSelf();      // PHP_SELF 
$server->getScriptName();   // SCRIPT_NAME
$server->get('HTTP_ACCEPT');// Любое значение из $_SERVER