В современной веб-разработке крайне важно уметь эффективно обрабатывать входящие запросы от пользователей или других сервисов. Фреймворк 1С-Битрикс предлагает для этого удобные инструменты, одним из которых является абстрактный класс \Bitrix\Main\Request
(наследуется от \Bitrix\Main\Type\ParameterDictionary
). В этой статье мы рассмотрим основные методы и особенности работы с данным классом, а также разберём несколько практических примеров.

1. Общие сведения о Request
Класс Request служит для получения данных о текущем запросе:
- HTTP-метод (
GET
,POST
и т.п.) - Протокол (HTTP/HTTPS)
- Запрошенный URL
- Параметры запроса (Query, Post, File и т.д.)
Благодаря тому, что Request
расширяет класс \Bitrix\Main\Type\ParameterDictionary
, с ним можно работать почти так же, как с ассоциативным массивом (получать, задавать значения). Но при этом у него есть набор собственных методов и свойств, облегчающих доступ к данным.
Ключевые пространства имён, задействованные при работе с запросом:
\Bitrix\Main\Type
\Bitrix\Main\IO
\Bitrix\Main\Text
Чаще всего объект класса Request
получают через контекст приложения:
use Bitrix\Main\Application;
// ...
$request = Application::getInstance()->getContext()->getRequest();
После этого можно обращаться к методам данного класса, получать параметры запроса и обрабатывать их в соответствии с логикой приложения.
2. Основные методы класса Request
Ниже приведён список некоторых важных методов, которые помогают работать с данными запроса.
2.1. isAjaxRequest()
- Описание: Метод возвращает
true
, если текущий запрос был отправлен с помощью AJAX, иначе –false
. - С версии: 15.5.0
Пример использования:
if ($request->isAjaxRequest()) {
// Выполняем действия, характерные для AJAX-запроса
// Например, возвращаем данные в формате JSON
$result = ['status' => 'success', 'message' => 'AJAX response'];
echo json_encode($result);
die();
} else {
// Обычное поведение при не-AJAX запросе
// Например, подключаем шаблон
require $_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php";
// ...
}
2.2. getRequestedPageDirectory()
- Описание: Возвращает директорию запрошенной страницы.
- Важный момент: В более старых версиях 1С-Битрикс (например, до 22.0.400) метод возвращал путь без завершающего слеша. Начиная с версии 23.300.300 замечено, что метод может возвращать путь со слешем на конце.
Пример использования:
$pageDir = $request->getRequestedPageDirectory();
// При старых версиях 1С-Битрикс: /catalog
// Начиная с некоторых обновлений: /catalog/
// Для универсального подхода лучше обрезать слеш при необходимости:
$pageDir = rtrim($pageDir, '/');
2.3. Получение параметров запроса: toArray()
, getPostList()
, getQueryList()
toArray()
Возвращает все параметры (изGET
,POST
, а также возможные служебные данные) в виде массива.$allParams = $request->toArray(); // $allParams теперь содержит все переданные параметры
getPostList()->toArray()
Возвращает только POST-параметры в виде массива.$postValues = $request->getPostList()->toArray(); // $postValues теперь содержит все POST данные
getQueryList()->toArray()
Возвращает только GET-параметры в виде массива.$getValues = $request->getQueryList()->toArray(); // $getValues теперь содержит все GET данные
Использование данных методов упрощает работу с запросом, так как у вас всегда есть быстрый способ получить нужный массив параметров без необходимости вручную фильтровать или проверять суперглобальные массивы $_GET
и $_POST
.
3. Другие полезные возможности класса
3.1. Проверка методов запроса
Для ситуаций, когда нужно понять, какой метод был использован (GET, POST, PUT, DELETE и т.д.), можно применять метод:
$request->getRequestMethod(); // Возвращает строку 'GET', 'POST' и т.д.
В зависимости от результата можно строить различную логику обработки:
if ($request->getRequestMethod() === 'POST') {
// Логика для POST-запроса
} else {
// Логика для других типов запросов
}
3.2. Получение URI и протокола
Иногда важно знать, по какому протоколу и на какую страницу пришёл запрос:
$request->isHttps()
– вернётtrue
, если запрос идёт по HTTPS.$request->getRequestUri()
– вернёт полный URI без протокола и домена.$request->getHttpHost()
– вернёт доменное имя.
Пример:
$isSecure = $request->isHttps() ? 'HTTPS' : 'HTTP';
$uri = $request->getRequestUri();
$host = $request->getHttpHost();
echo "Протокол: {$isSecure}";
echo "URI: {$uri}";
echo "Домен: {$host}";
3.3. Обработка файлов
В случае отправки файлов, например, через HTML-форму, удобно воспользоваться методами, которые предоставляет Request
:
$files = $request->getFileList()->toArray();
if (!empty($files['fileInputName'])) {
// Обрабатываем загруженный файл
// $files['fileInputName'] содержит массив с информацией:
// name, type, tmp_name, error, size
}
Это избавляет от необходимости напрямую обращаться к $_FILES
.
4. Практический пример
Допустим, у нас есть страница, на которую присылается AJAX-запрос методом POST
с данными формы. Примерная структура:
use Bitrix\Main\Application;
require $_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php";
$request = Application::getInstance()->getContext()->getRequest();
if ($request->isAjaxRequest()) {
// Получаем POST-параметры
$postData = $request->getPostList()->toArray();
// Выполняем некую обработку. Допустим, сохраняем в базу:
// $result = saveDataToDatabase($postData);
// Возвращаем ответ в формате JSON
$response = [
'status' => 'success',
'message' => 'Данные успешно сохранены'
];
echo json_encode($response);
// Завершаем скрипт, чтоб не подключать основной шаблон
die();
} else {
// Если это обычный GET-запрос или другой метод:
// Грузим шаблон, выводим контент
?>
<h1>Пример обработки запроса</h1>
<form action="" method="post" id="ajaxForm">
<input type="text" name="username" placeholder="Имя">
<input type="submit" value="Отправить">
</form>
<div id="result"></div>
<script>
document.getElementById('ajaxForm').addEventListener('submit', function(e) {
e.preventDefault();
var formData = new FormData(this);
fetch(location.href, {
method: 'POST',
body: formData,
headers: {
'X-Requested-With': 'XMLHttpRequest' // Для AJAX-запроса
}
})
.then(response => response.json())
.then(data => {
document.getElementById('result').innerHTML = data.message;
});
});
</script>
<?php
}
require $_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php";
В этом примере мы продемонстрировали, как при помощи isAjaxRequest()
можно отличить запросы, сделанные с помощью AJAX, от обычной загрузки страницы. getPostList()->toArray()
помогает быстро получить необходимые данные из формы без дополнительной валидации суперглобального массива $_POST
.
5. Важные нюансы и рекомендации
- Особенности версий:
Убедитесь, что в вашей версии 1С-Битрикс методы
Request
работают именно так, как описано в текущей документации. Обратите внимание на изменение поведенияgetRequestedPageDirectory()
– при переходе с версии 22.0.400 на 23.300.300 метод может возвращать завершающий слеш. - Безопасность:
Хотя класс
Request
упрощает получение данных запроса, не забывайте о проверке и экранировании пользовательского ввода (например, при работе с базой данных). Для этого используйте соответствующие функции 1С-Битрикс или PHP. - Переопределённые методы:
Если вы пишете свои классы, расширяющие функциональность
Request
, тщательно следите за совместимостью, чтобы не ломать базовую логику обработки запросов. - Документация: Полную информацию о классе и методах можно найти в официальной документации.
Заключение
Класс \Bitrix\Main\Request
– это фундаментальный инструмент для получения и обработки входящих данных в проектах на 1С-Битрикс. Он предоставляет удобный интерфейс для чтения любых параметров запроса, упрощает работу с AJAX и обеспечивает возможность гибкой настройки логики.
При использовании метода getRequestedPageDirectory()
обращайте внимание на различия в поведении в разных версиях платформы. В случае необходимости используйте дополнительные проверки и функции (rtrim
и т.д.) для приведения результата к желаемому формату.
Надеемся, что данный обзор поможет вам быстро освоить работу с классом Request
и эффективно обрабатывать любые входящие запросы в ваших веб-приложениях на 1С-Битрикс.