1.6 Серверное взаимодействиеlink

Назначениеlink

SFLoaderPlugin взаимодействует с сервером для получения:

  • Списка необходимых JS и CSS-файлов;
  • Шаблонов Smart-компонентов (если они используются);
  • Конфигураций и зависимостей;
  • Результатов кэшированной сборки (если она уже есть).

Такое взаимодействие необходимо, если проект работает в режиме standAlone: false, то есть не использует пред собранные ассеты, а полагается на динамическую загрузку и серверную генерацию.

Основной запросlink

Загрузчик отправляет GET-запрос на сервер по адресу:

/simai/loader/loader.php

С параметрами, например:

?a=modal,tooltip&relations={"modal":["core"]}&checkFake=true

Передаваемые параметрыlink

Параметр Назначение
a Список компонентов для загрузки
relations Объект зависимостей между компонентами
checkFake Флаг для запроса fake-шаблонов Smart-компонентов
url URL страницы (для формирования pageHash)
load Было обращение к бекенду ранее или нет
gzip Признак поддержки gzip-файлов (Что бы не гонять curl каждый раз)

Серверная обработкаlink

На сервере работает класс Loader.php, который:

  1. Обрабатывает входящие параметры;
  2. Вызывает LoaderAsset, AssetManager, TemplateLoader;
  3. Генерирует:
    1. JS и CSS сборки;
    2. fake-шаблоны;
    3. конфигурацию для инициализации.

Ответ сервераlink

Ответ может содержать:

  • smartFakeContent — сериализованные шаблоны;
  • Список путей к .js и .css-файлам;
  • Идентификаторы кеша (BUNDLE_ID, pageHash);
  • Флаг gzip.
{
  "status": true,
  "js": [
    "/simai/cache/loader/bundle-abc123.js"
  ],
  "css": [
    "/simai/cache/loader/bundle-abc123.css"
  ],
  "smartFakeContent": {
    "templates": {
      ...
    },
    "fakeTemplates": {
      "modal": "<div>...</div>"
    }
  },
  "bundleId": "abc123"
}

Особенностиlink

  • Запрос всегда зависит от текущего URL (хэшируется на сервере);
  • Сервер может вернуть уже готовые сборки;
  • Используется библиотека MatthiasMullie\Minify для объединения и минификации;
  • Для Smart-компонентов вызывается TemplateLoader::buildObject().

2.5 LoaderRequest.php — Обработка запросаlink

Назначениеlink

Класс LoaderRequest — это универсальный адаптер запроса, который обеспечивает:

  • безопасный доступ к параметрам запроса;
  • работу с разными окружениями (в т.ч. Bitrix и обычный PHP);
  • единый интерфейс для получения GET, POST, заголовков и т.д.

Используется в Loader.php для получения всех параметров, включая a, b, clear_cache, relations, url, checkFake.

Основная структураlink

 class LoaderRequest
 {
    protected string $method;
    protected string $uri;
    protected array $get;
    protected array $post;
    protected array $server;
    protected array $cookies;
 }

Все суперглобальные переменные копируются и сохраняются в объект, чтобы избежать прямого обращения к $_GET, $_POST и т.д.

Конструкторlink

 public function __construct(array $get = [], array $post = [], array $server = [], array $cookies = [])

Позволяет задать входные данные вручную (например, из симуляции запроса), либо по умолчанию использует суперглобалы.

Ключевые методыlink

getQuery(string $key = null): mixedlink

Возвращает значение из GET-параметров. Если ключ не передан — возвращает весь массив $_GET.

getPost(string $key = null): mixedlink

Аналогично — для POST-параметров.

getCookies(): arraylink

Возвращает массив cookie.

getServerParams(): arraylink

Возвращает $_SERVER.

getMethod(): stringlink

HTTP-метод запроса (GET, POST, и т.д.).

getUri(): stringlink

URI без query string. Пример: /page/item.

getRequestUri(): stringlink

Полный URI, включая query string. Пример: /page/item?a=modal.

getHeader($name): string|nulllink

Позволяет получить значение заголовка по имени. Использует getallheaders() при наличии.

getRequestedPageDirectory(): stringlink

Возвращает директорию страницы без query-параметров и без последнего сегмента.

Примерlink

  • URI: /catalog/item/123
  • Вернёт: /catalog/item

Используется при формировании pageHash.

Особенностиlink

  • Универсален — работает как в Bitrix (через Application::getContext()), так и в обычный PHP;
  • Не зависит от глобальных переменных;
  • Упрощает тестирование и расширение загрузчика;
  • Все параметры можно получить централизованно через объект Loader::$request.