Блог Горошко Андрея 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

Управление выводом в Битрикс: Буферизация контента и RestartBufferУправление выводом в Битрикс: Буферизация контента и RestartBuffer

Средний рейтинг Еще нет оценок Весь HTML-код, который генерируется на странице Битрикс, не отправляется в браузер сразу. Он накапливается в специальном буфере вывода. Только после того, как отработает эпилог (epilog_after.php), Битрикс

Свойства элементов Битрикс: Работа со Списком, Файлом и ПривязкойСвойства элементов Битрикс: Работа со Списком, Файлом и Привязкой

Средний рейтинг Еще нет оценок При добавлении или обновлении элементов через API (CIBlockElement::Add/Update) работа с простыми свойствами (строка, число) интуитивно понятна. Однако сложные типы, такие как «Список», «Файл» и «Привязка

 CIBlockElement::GetList — Полное руководство по выборке элементов инфоблока в Битрикс CIBlockElement::GetList — Полное руководство по выборке элементов инфоблока в Битрикс

Средний рейтинг Еще нет оценок CIBlockElement::GetList — это, без преувеличения, один из самых важных и часто используемых методов в API 1С-Битрикс. Он позволяет получать элементы из информационных блоков с гибкими условиями