Блог Горошко Андрея 1C-Битрикс  Ядро D7: Application, Context и Request — современная работа с окружением

 Ядро D7: Application, Context и Request — современная работа с окружением

В старом ядре Битрикс для доступа к данным окружения использовались глобальные переменные ($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 окружение, глобальные переменные, современный Битрикс.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Получить список служб доставки sale.delivery.getlistПолучить список служб доставки sale.delivery.getlist

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить список служб доставки sale.delivery.getlist», проанализируем лучшие практики

Как использовать D7Lang() в 1С-Битрикс: пример кодаКак использовать D7Lang() в 1С-Битрикс: пример кода

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать D7Lang() в 1С-Битрикс: пример кода». Вы узнаете экспертные методики работы с

Кросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelperКросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelper

Если вы пишете «сырые» SQL-запросы (через $connection->query), вы рискуете привязаться к конкретной базе данных (обычно MySQL). SqlHelper — это абстракция, которая генерирует правильный SQL-синтаксис для текущей активной БД. Получить хелпер можно так: 1.