ParamTrait
Трейт: Xpage\Core\Trait\Component\ParamTrait
Назначение: Предназначен для стандартизации и автоматизации подготовки входных параметров компонента ($arParams), реализует декларативный подход: вместо ручной проверки каждого ключа, параметры проходят через цепочку специализированных методов-обработчиков.
Зависимости:
- Ядро:
Bitrix\Main. - Ожидает наличие метода
getIblockIdByApiCode()в классе компонента (обычно наследуется отXpage\Core\Component).
prepareComponentParams(array $arParams, array $prepareStages = [])
Главный входной узел (конвейер).
- Логика: Проходит по списку стадий (из
$defaultPrepareMapили переданных вручную) и вызывает соответствующие методыprepare...Params. - Гибкость: Позволяет определить строгий порядок обработки или пропустить ненужные шаги.
Основные стадии обработки
prepareIblockParams: ОчищаетIBLOCK_API_CODEи автоматически конвертирует его в числовойIBLOCK_ID. Если метод конвертации не найден, выбрасывает критическую ошибку.prepareSortParams: Устанавливает значения по умолчанию для трех уровней сортировки. Приводит направления (ASC/DESC) к верхнему регистру.prepareCacheParams: Гарантирует наличие времени кэширования. По умолчанию — 1 год (31 536 000 сек).prepareSectionSelectParams/prepareElementSelectParams:- Формирует массивы выбираемых полей.
- Важно: Автоматически добавляет в выборку (
fields) те поля, которые используются в параметрах роутинга (ROUTE_PARAMETER_...), чтобы адрес детальной страницы мог быть сформирован без дополнительных запросов.
prepareSeoParams: Приводит SEO-настройки (Title, Keywords, Description, 404) к строгому форматуY/N.prepareCommonParams: Обрабатывает флаги подключения шаблона и конвертации ключей результата вcamelCase.
Примеры использования
Стандартное подключение в компоненте
class MyComponent extends \Xpage\Core\Component
{
use \Xpage\Core\Trait\Component\ParamTrait;
public function onPrepareComponentParams($arParams)
{
// Запускаем полную цепочку обработчиков
return $this->prepareComponentParams($arParams);
}
}
Выборочный запуск стадий
Если компоненту нужны только базовые настройки и кэш, но не нужны SEO и инфоблоки:
public function onPrepareComponentParams($arParams)
{
return $this->prepareComponentParams($arParams, ['cache', 'common']);
}
Технические особенности
- Декларативность: Список стадий описан в массиве
$defaultPrepareMap. Это позволяет легко расширять логику в конкретных компонентах, просто переопределяя карту или добавляя новые методы. - Безопасность: Методы используют
array_filterи приведение типов, что защищает от передачи пустых строк или некорректных массивов из настроек.parameters.php. - Автоматизация роутинга: Трейт «понимает», что если в роуте используется поле
CODE, то его обязательно нужно включить вSELECTзапрос к базе, даже если контент-менеджер забыл выбрать его в настройках компонента.