Блог Горошко Андрея 1C-Битрикс,PHP,Разработка Request Response: Руководство разработчика

Request Response: Руководство разработчика

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Request Response: Руководство разработчика», проанализируем лучшие практики и покажем, как правильно использовать request response в реальных задачах.

—
title: Request и Response
—

Запрос (Request)

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

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

  • \\Main\\Type — работает с типами данных,
  • \\Main\\IO — работает с файлами,

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

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

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

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

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

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

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

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

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

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

Класс 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

  • Добавить заголовок
   \Bitrix\Main\HttpResponse::addHeader(
      $name,
      $value
   )
  • Установить заголовок
   \Bitrix\Main\HttpResponse::setHeaders(
      Web\HttpHeaders $headers
   )
  • Получить заголовок
   \Bitrix\Main\HttpResponse::getHeaders()

Cookies \Bitrix\Main\Web\Cookie

  • Добавить cookie
   \Bitrix\Main\HttpResponse::addCookie(
      Web\Cookie $cookie,
      $replace,
      $checkExpires
   )
  • Получить cookies
   \Bitrix\Main\HttpResponse::getCookies()

Контента \Bitrix\Main\HttpResponse::$content

  • Установить контент
   \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!'); // установить контент

Классы

   {
   	"status": "string",
   	"data": "mixed",
   	"errors": []
   }

Для NGINX можно использовать расширение mod_zip для создания архивов без нагрузки на PHP.

   use \Bitrix\Main\Engine\Response;
   $archive = new Response\Zip\Archive('archive.zip');
   $archive->addEntry(Response\Zip\ArchiveEntry::createFromFileId($fileId));
  • 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 — уменьшает изображения.

💡 Экспертное мнение и рекомендации

Советы эксперта по интеграции:

  • Всегда используйте кэширование при частых запросах к request response, чтобы разгрузить базу данных.
  • Соблюдайте стандарты PSR при написании обработчиков для «Request Response: Руководство разработчика».
  • Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Интеграция сайта Битрикс с платформой управления отзывами и репутациейИнтеграция сайта Битрикс с платформой управления отзывами и репутацией

Бесшовная и отказоустойчивая интеграция сайта на 1С-Битрикс с внешними учетными системами, банками, службами доставки и маркетплейсами — основа масштабирования современного бизнеса. Услуга «Интеграция сайта Битрикс с платформой управления отзывами и

Получить элементы справочника по типу crm.status.entity.itemsПолучить элементы справочника по типу crm.status.entity.items

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Получить элементы справочника по типу crm.status.entity.items». Мы подготовили подробный разбор принципов работы и развернутые примеры

Как использовать метод SDK telephony.externalcall.show в Битрикс24Как использовать метод SDK telephony.externalcall.show в Битрикс24

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как использовать метод SDK telephony.externalcall.show в Битрикс24», проанализируем