В старом ядре Битрикс для доступа к данным окружения использовались глобальные переменные ($APPLICATION, $_SERVER, $_POST, $_SESSION).
Этот подход затрудняет тестирование и понимание кода.
В ядре D7 введены специальные объекты, которые инкапсулируют эти данные.
1. Application — точка входа
Класс \Bitrix\Main\Application — это ядро системы. Он является синглтоном, то есть существует в единственном экземпляре на протяжении всего хита.
Как получить экземпляр:
use Bitrix\Main\Application;
$application = Application::getInstance();
Через объект Application можно получить доступ ко всем остальным сущностям окружения.
2. Context — контекст текущего запроса
Контекст (\Bitrix\Main\Context) содержит всю информацию о текущем хите: запрос, ответ, сервер, культура (языковые настройки).
Как получить контекст:
use Bitrix\Main\Application;
$context = Application::getInstance()->getContext();
// Или короче, что предпочтительнее
$context = \Bitrix\Main\Context::getCurrent();
3. Request — данные входящего запроса
Самый полезный объект в контексте — это Request (\Bitrix\Main\HttpRequest). Он предоставляет унифицированный доступ к $_GET, $_POST, $_FILES, $_COOKIE и $_SERVER.
Как получить объект Request:
use Bitrix\Main\Context;
$request = Context::getCurrent()->getRequest();
Работа с данными запроса:
Объект $request реализует интерфейс ArrayAccess, что позволяет обращаться к данным как к массиву, но лучше использовать специальные методы.
// Получить значение из GET или POST
$value = $request->get("my_param");
// Получить значение только из POST
$name = $request->getPost("USER_NAME");
// Получить значение только из GET
$page = $request->getQuery("page");
// Получить массив всех POST-данных
$postData = $request->getPostList()->toArray();
// Проверить, каким методом отправлен запрос
if ($request->isPost()) {
// Это POST-запрос
}
// Получить загруженный файл (аналог $_FILES)
$file = $request->getFile("my_image");
// Получить текущую запрошенную страницу
$currentPage = $request->getRequestedPage(); // вернет /about/contacts/index.php
Пример обработки формы на D7:
use Bitrix\Main\Context;
$request = Context::getCurrent()->getRequest();
if ($request->isPost() && check_bitrix_sessid()) {
$feedbackName = $request->getPost("name");
$feedbackEmail = $request->getPost("email");
if (!empty($feedbackName) && !empty($feedbackEmail)) {
// ... логика сохранения ...
}
}
4. Server — данные из $_SERVER
Объект Server (\Bitrix\Main\Server) предоставляет доступ к серверным переменным.
$server = Context::getCurrent()->getServer();
$documentRoot = $server->getDocumentRoot();
$requestUri = $server->getRequestUri();
$httpHost = $server->getHttpHost();
// Можно обращаться и как к массиву
$phpSelf = $server["PHP_SELF"];
Преимущества нового подхода:
- Читаемость: Код становится очевидным. $request->isPost() гораздо понятнее, чем $_SERVER[‘REQUEST_METHOD’] === ‘POST’.
- Тестируемость: В объекты можно «подсунуть» тестовые данные, что невозможно сделать с глобальными переменными.
- Безопасность: Методы get* по умолчанию применяют базовые фильтры безопасности.
- Удобство: Предоставляются удобные хелперы, вроде isPost(), isAdminSection() и т.д.
Вывод:
Переход на использование Application, Context и Request — это важный шаг к написанию современного, чистого и поддерживаемого кода на Битрикс. Начинайте использовать эти объекты во всех новых проектах и постепенно рефакторите старый код.
Bitrix D7, Application, Context, Request, getContext, getRequest, isPost, D7 окружение, глобальные переменные, современный Битрикс.