1.6 Серверное взаимодействие
Назначение
SFLoaderPlugin взаимодействует с сервером для получения:
- Списка необходимых JS и CSS-файлов;
- Шаблонов Smart-компонентов (если они используются);
- Конфигураций и зависимостей;
- Результатов кэшированной сборки (если она уже есть).
Такое взаимодействие необходимо, если проект работает в режиме standAlone: false, то есть не использует
пред собранные ассеты, а полагается на динамическую загрузку и серверную генерацию.
Основной запрос
Загрузчик отправляет GET-запрос на сервер по адресу:
/simai/loader/loader.php
С параметрами, например:
?a=modal,tooltip&relations={"modal":["core"]}&checkFake=true
Передаваемые параметры
| Параметр | Назначение |
|---|---|
| a | Список компонентов для загрузки |
| relations | Объект зависимостей между компонентами |
| checkFake | Флаг для запроса fake-шаблонов Smart-компонентов |
| url | URL страницы (для формирования pageHash) |
| load | Было обращение к бекенду ранее или нет |
| gzip | Признак поддержки gzip-файлов (Что бы не гонять curl каждый раз) |
Серверная обработка
На сервере работает класс Loader.php, который:
- Обрабатывает входящие параметры;
- Вызывает
LoaderAsset,AssetManager,TemplateLoader; - Генерирует:
- JS и CSS сборки;
- fake-шаблоны;
- конфигурацию для инициализации.
Ответ сервера
Ответ может содержать:
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"
}
Особенности
- Запрос всегда зависит от текущего URL (хэшируется на сервере);
- Сервер может вернуть уже готовые сборки;
- Используется библиотека
MatthiasMullie\Minifyдля объединения и минификации; - Для Smart-компонентов вызывается
TemplateLoader::buildObject().
2.5 LoaderRequest.php — Обработка запроса
Назначение
Класс LoaderRequest — это универсальный адаптер запроса, который обеспечивает:
- безопасный доступ к параметрам запроса;
- работу с разными окружениями (в т.ч. Bitrix и обычный PHP);
- единый интерфейс для получения GET, POST, заголовков и т.д.
Используется в Loader.php для получения всех параметров, включая a, b, clear_cache, relations, url,
checkFake.
Основная структура
class LoaderRequest
{
protected string $method;
protected string $uri;
protected array $get;
protected array $post;
protected array $server;
protected array $cookies;
}
Все суперглобальные переменные копируются и сохраняются в объект, чтобы избежать прямого обращения к $_GET, $_POST и
т.д.
Конструктор
public function __construct(array $get = [], array $post = [], array $server = [], array $cookies = [])
Позволяет задать входные данные вручную (например, из симуляции запроса), либо по умолчанию использует суперглобалы.
Ключевые методы
getQuery(string $key = null): mixed
Возвращает значение из GET-параметров. Если ключ не передан — возвращает весь массив $_GET.
getPost(string $key = null): mixed
Аналогично — для POST-параметров.
getCookies(): array
Возвращает массив cookie.
getServerParams(): array
Возвращает $_SERVER.
getMethod(): string
HTTP-метод запроса (GET, POST, и т.д.).
getUri(): string
URI без query string. Пример: /page/item.
getRequestUri(): string
Полный URI, включая query string. Пример: /page/item?a=modal.
getHeader($name): string|null
Позволяет получить значение заголовка по имени. Использует getallheaders() при наличии.
getRequestedPageDirectory(): string
Возвращает директорию страницы без query-параметров и без последнего сегмента.
Пример
- URI:
/catalog/item/123 - Вернёт:
/catalog/item
Используется при формировании pageHash.
Особенности
- Универсален — работает как в Bitrix (через
Application::getContext()), так и в обычный PHP; - Не зависит от глобальных переменных;
- Упрощает тестирование и расширение загрузчика;
- Все параметры можно получить централизованно через объект
Loader::$request.