Request и Response
Запрос (Request)
Request — это абстрактный класс, который предоставляет информацию о текущем запросе. Он позволяет узнать метод и протокол, запрошенный URL, переданные параметры и другие данные. Класс расширяет \Bitrix\Main\Type\ParameterDictionary.
Класс обращается к пространствам имен:
-
\Main\Type — работает с типами данных,
-
\Main\IO — работает с файлами,
-
\Main\Text — работает с текстом.
Пример использования:
use Bitrix\Main\Application;
use Bitrix\Main\Context;
$context = Application::getInstance()->getContext();
$request = $context->getRequest();
// Или более кратко:
$request = Context::getCurrent()->getRequest();
Параметры запроса
-
Получить параметр GET или POST
-
Получить GET-параметры
-
Получить POST-параметры
-
Получить загруженный файл
-
Получить значение cookie
Данные о запросе
-
Получить метод запроса
-
Проверить тип запроса
Данные о запрошенной странице
-
Проверить нахождение в административном разделе
-
Получить запрошенный адрес
-
Получить запрошенную страницу
-
Получить директорию запрошенной страницы
Класс HttpRequest
HttpRequest — это класс, который управляет объектом Request. Он содержит информацию о текущем запросе, включая его тип и параметры. Этот класс помогает избежать использования глобальных переменных, которые применялись в старом ядре.
Создавать объект HttpRequest вручную не требуется. Его можно получить через приложение и контекст:
use Bitrix\Main\Application;
$request = Application::getInstance()->getContext()->getRequest();
$name = $request->getPost("name");
$email = htmlspecialchars($request->getQuery("email"));
Ответ (Response)
Класс \Bitrix\Main\HttpResponse — это базовый класс для работы с HTTP-ответами. Он служит контейнером для:
HTTP-заголовков \Bitrix\Main\Web\HttpHeaders
-
Добавить заголовок
-
Установить заголовок
-
Получить заголовок
Cookies \Bitrix\Main\Web\Cookie
-
Добавить cookie
-
Получить cookies
Контента \Bitrix\Main\HttpResponse::$content
-
Установить контент
-
Получить контент
С помощью HttpResponse можно формировать ответы приложения любого типа и содержания.
$response = new \Bitrix\Main\HttpResponse();
$response->addHeader('Content-Type', 'text/plain'); // добавить заголовок
$response->addCookie(new \Bitrix\Main\Web\Cookie('Biscuits', 'Yubileynoye')); // добавить cookie
$response->setContent('Hello, world!'); // установить контент
Стандартные форматы ответов
-
AjaxJson — методы для JSON-ответов. Все ответы от контроллеров
\Bitrix\Main\Engine\Controllerимеют структуру, понятную для JS API BX.ajax.runAction, BX.ajax.runComponentAction. -
Json — формирует JSON-ответ. Преобразует данные в JSON, конвертирует в UTF-8 и устанавливает заголовок
application/json; charset=UTF-8. -
Component — работает с компонентами. Для загрузки компонента через AJAX:
Формирует ответ для представления компонента:
```json
{
"status": string,
"data": {
"html": string,
"assets": {
"css": array,
"js": array,
"string": array
},
"additionalParams": array
},
"errors": array
}
```
Файлы и изображения
-
BFile — работает с файлами. Используется для скачивания файлов из таблицы
b_file. -
ResizedImage — уменьшает изображения.
-
Zip/Archive — работает с архивом. Для NGINX можно использовать расширение mod_zip для создания архивов без нагрузки на PHP.
use Bitrix\Main\Engine\Response;
$archive = new Response\Zip\Archive('archive.zip');
$archive->addEntry(Response\Zip\ArchiveEntry::createFromFileId($fileId));
- Zip/ArchiveEntry — описывает элемент zip-архива.
Управление ответом
Класс Redirect автоматически делает:
-
проверки безопасности,
-
редирект с 301 или 302 статусом.
// сделать переадресацию с 302 статусом
$response = new \Bitrix\Main\Engine\Response\Redirect('/auth');
// сделать переадресацию с 301 статусом
$response = new \Bitrix\Main\Engine\Response\Redirect('/auth');
$response->setStatus('301 Moved Permanently');
Преобразование данных
Класс Converter конвертирует строки и массивы. Для настройки преобразований класс использует битовые маски.
| Константа | Описание |
|---|---|
TO_SNAKE |
Перевести в snake_case. |
TO_SNAKE_DIGIT |
Перевести в snake_case с поддержкой цифр. |
TO_CAMEL |
Перевести в camelCase. |
TO_UPPER |
Перевести в верхний регистр. |
TO_LOWER |
Перевести в нижний регистр. |
LC_FIRST |
Перевести первую букву в нижний регистр. |
UC_FIRST |
Перевести первую букву в верхний регистр. |
KEYS |
Применить преобразования к ключам ассоциативного массива. |
VALUES |
Применить преобразования к значениям массива. |
RECURSIVE |
Выполнить преобразования рекурсивно для массива и вложенных массивов. |
Есть предустановленный формат Converter::OUTPUT_JSON_FORMAT, который использует константы: TO_CAMEL, KEYS, RECURSIVE.
Методы класса:
-
__construct($format)— создает объект с заданными преобразованиями, -
process($data)— применяет преобразования к строке или массиву, -
getFormat(): int— возвращает текущий формат, -
setFormat($format)— устанавливает новый формат, -
toJson()— создает объект с форматомOUTPUT_JSON_FORMAT.
use Bitrix\Main\Engine\Response\Converter;
// Преобразование строки: первая буква в нижний регистр + camelCase
$converter = new Converter(Converter::LC_FIRST | Converter::TO_CAMEL);
echo $converter->process('la_la_land'); // laLaLand
// Подготовка массива для JSON-ответа
$converter = new Converter(Converter::OUTPUT_JSON_FORMAT);
$result = $converter->process([
'CATEGORIES' => [
['ID' => 1, 'NAME' => 'Foods'],
['ID' => 12, 'NAME' => 'Auto'],
]
]);
/*
[
'categories' => [
['id' => 1, 'name' => 'Foods'],
['id' => 12, 'name' => 'Auto'],
],
]
*/
// Комбинация преобразований
$converter = new Converter(
Converter::TO_SNAKE_DIGIT |
Converter::KEYS |
Converter::VALUES |
Converter::RECURSIVE
);
$result = $converter->process([
'property109',
'props' => [
'element1' => ['property210']
]
]);
/*
[
'property_109',
'props' => [
'element_1' => ['property_210']
]
]
*/