Bitrix классы Request и Response

Share

Класс HttpRequest

HttpRequest — это класс, который управляет объектом Request. Он содержит информацию о текущем запросе, включая его тип и параметры. Этот класс помогает избежать использования глобальных переменных, которые применялись в старом ядре.

Создавать объект HttpRequest вручную не требуется. Его можно получить через приложение и контекст:


$request = Bitrix\Main\Application::getInstance()->getContext()->getRequest(); //Возвращает объект request

// получение параметра GET или POST
$value = $request->get("param");

//GET params
$value = $request->getQuery("param"); // получение GET-параметра
$arValues = $request->getQueryList()->toArray(); // получение списка GET-параметров в виде массива

//POST params
$value = $request->getPost("param"); // получение POST-параметра
$values = $request->getPostList()->toArray(); // получение списка POST-параметров в виде массива

//Cookie
$value = $request->getCookie("param"); // получение значения определенного ключа сookie
$request->getCookieList()->toArray() // получение списка сookie в виде массива

//Headers
$arHeaders = $request->getHeaders()->toArray(); // Получение к заголовки запроса в виде массива

//Files
$value = $request->getFile("name"); // получение определенного загружаемого файла на сервер по ключу
$values = $request->getFileList()->toArray(); // получение списка загруженных файлов в виде массива



Запрос (Request)

Request — это абстрактный класс, который предоставляет информацию о текущем запросе. Он позволяет узнать метод и протокол, запрошенный URL, переданные параметры и другие данные. Класс расширяет \Bitrix\Main\Type\ParameterDictionary.

Класс обращается к пространствам имен:

  1. \Main\Type — работает с типами данных,
  2. \Main\IO — работает с файлами,
  3. \Main\Text — работает с текстом.

Пример использования:

use Bitrix\Main\Application;
use Bitrix\Main\Context;

$context = Application::getInstance()->getContext();
$request = $context->getRequest();

// Или более кратко:
$request = Context::getCurrent()->getRequest();


Параметры запроса

  1. Получить параметр GET или POST
$value = $request->get("param");
$value = $request["param"];
  1. Получить GET-параметры
$value = $request->getQuery("param"); // получить параметр param
$values = $request->getQueryList(); // получить список всех параметров
  1. Получить POST-параметры
$value = $request->getPost("param"); // получить параметр param
$values = $request->getPostList(); // получить список всех параметров
  1. Получить загруженный файл
$value = $request->getFile("param"); // получить файл param
$values = $request->getFileList(); // получить список всех загруженных файлов
  1. Получить значение cookie
$value = $request->getCookie("param"); // получить cookie param
$values = $request->getCookieList(); // получить список всех cookies


Данные о запросе

  1. Получить метод запроса
$method = $request->getRequestMethod();
  1. Проверить тип запроса
$flag = $request->isGet(); // вернет true, если GET-запрос
$flag = $request->isPost(); // вернет true, если POST-запрос
$flag = $request->isAjaxRequest(); // вернет true, если AJAX-запрос
$flag = $request->isHttps(); // вернет true, если HTTPS-запрос


Данные о запрошенной странице

  1. Проверить нахождение в административном разделе
$flag = $request->isAdminSection(); // вернет true, если находимся в административном разделе
  1. Получить запрошенный адрес
$requestUri = $request->getRequestUri(); // например, "/catalog/category/?param=value"
  1. Получить запрошенную страницу
$requestPage = $request->getRequestedPage(); // например, "/catalog/category/index.php"
  1. Получить директорию запрошенной страницы
$rDir = $request->getRequestedPageDirectory(); // например, "/catalog/category"


Ответ (Response)

Класс \Bitrix\Main\HttpResponse — это базовый класс для работы с HTTP-ответами. Он служит контейнером для:

HTTP-заголовков

\Bitrix\Main\Web\HttpHeaders


  1. Добавить заголовок
\Bitrix\Main\HttpResponse::addHeader(
$name,
$value
)

Установить заголовок

\Bitrix\Main\HttpResponse::setHeaders(
Web\HttpHeaders $headers
)

Получить заголовок

\Bitrix\Main\HttpResponse::getHeaders()

Cookies

\Bitrix\Main\Web\Cookie


  1. Добавить cookie
\Bitrix\Main\HttpResponse::addCookie(
Web\Cookie $cookie,
$replace,
$checkExpires
)

Получить cookies

\Bitrix\Main\HttpResponse::getCookies()

Контента

\Bitrix\Main\HttpResponse::$content


  1. Установить контент
\Bitrix\Main\HttpResponse::setContent(
$content
)

Получить контент

\Bitrix\Main\HttpResponse::getContent()

С помощью 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!'); // установить контент


Классы

  1. AjaxJson — методы для JSON-ответов. Все ответы от контроллеров \Bitrix\Main\Engine\Controller имеют структуру, понятную для JS API BX.ajax.runAction, BX.ajax.runComponentAction:
{
"status": "string",
"data": "mixed",
"errors": []
}

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-архива.

BFile — работает с файлами. Используется для скачивания файлов из таблицы

b_file

.


Component — работает с компонентами. Для загрузки компонента через AJAX:

new \Bitrix\Main\Engine\Response\Component(
'bitrix:disk.file.view',
'',
[
'FILE_ID' => $fileId,
]
);

Формирует ответ для представления компонента:

{
"status": string,
"data": {
"html": string,
"assets": {
"css": array,
"js": array,
"string": array
},
"additionalParams": array
},
"errors": array
}

Json — формирует JSON-ответ. Преобразует данные в JSON, конвертирует в UTF-8 и устанавливает заголовок

application/json; charset=UTF-8

.


new \Bitrix\Main\Engine\Response\Json('ping-pong');
/**
Content-Type: application/json; charset=UTF-8
"ping-pong"
**/

new \Bitrix\Main\Engine\Response\Json([
'id' => 2208,
'type' => 'license',
]);
/**
Content-Type: application/json; charset=UTF-8
{"id": 2208, "type": "license"}
**/

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');

ResizedImage — уменьшает изображения.