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

Мой рейтинг:

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

Related Post

CRUD-операции в Bitrix D7 ORM: add, update, delete на практикеCRUD-операции в Bitrix D7 ORM: add, update, delete на практике

Средний рейтинг Еще нет оценок Мы уже рассмотрели, как выбирать данные с помощью getList в D7 ORM. Теперь давайте разберем полный цикл CRUD-операций (Create, Read, Update, Delete), который позволяет полностью управлять данными

Создание своего модуля в Битрикс: Структура, install/index.php и version.phpСоздание своего модуля в Битрикс: Структура, install/index.php и version.php

Средний рейтинг Еще нет оценок Модуль — это основной способ расширения функциональности Битрикс. Создание собственного модуля позволяет инкапсулировать бизнес-логику, компоненты, классы и административные страницы в единый, легко устанавливаемый пакет. Шаг

Современная работа с разделами инфоблоков: SectionTable::getList в Bitrix D7 ORMСовременная работа с разделами инфоблоков: SectionTable::getList в Bitrix D7 ORM

Средний рейтинг Еще нет оценок Продолжая осваивать D7 ORM, перейдем от элементов к разделам. Для работы с разделами инфоблоков в современном API предназначен класс \Bitrix\Iblock\SectionTable. Он предоставляет тот же мощный и