Модель настроек
Чтобы прочитать настройку, нужно знать сайт, раздел и ключ. Например, адрес подписи кнопки — s1 / base / buttonTitle.
Раздел base определяет, где находится настройка. Группа «Кнопка связи» лишь объединяет поля в интерфейсе. Тип данных описывает само значение: текст, переключатель, список, дату или время.
Тип данных, редактор и результат API
| Тип данных | Результат get() | Пустое значение | Редактор |
|---|---|---|---|
string | Строка | '' | input или textarea |
boolean | true или false | Выключенное состояние — false | checkbox |
enum, одиночный | Строковый код варианта | null | select |
enum, множественный | Массив строковых кодов | [] | Список с множественным выбором |
date | Строка YYYY-MM-DD, например '2026-10-13' | null | calendar |
time | Строка HH:MM, например '12:00' | null | time |
Множественность доступна только для enum. В модели редактор списка — select; интерфейс для множественного списка использует развёрнутый выбор. Legacy select_multiple переносится как enum с множественностью, а не как отдельный тип данных.
Коды списка определяются в dataOptions.items, например ['value' => 'support', 'label' => 'Поддержка']. get() возвращает коды, а selectedOptions() — выбранные пары код/подпись.
Когда применяется default
note
Аргумент $default — резервный результат на случай, если настройка не найдена. Он не заменяет существующее значение, даже если оно пустое: false, '', null или [].
Settings::get('base', 'useButton', 's1', true); // false, если настройка существует и выключена, а не true. Settings::get('contacts', 'departments', 's1', ['support']); // [], если существующий множественный список не имеет выбранных вариантов. Settings::get('base', 'missingKey', 's1', 'резервное значение'); // 'резервное значение', если настройки с таким адресом нет.
Для проверки наличия используйте has(), а не empty() и не сравнение результата с false. Ошибка чтения или повреждённые данные не означают отсутствие настройки: $default не является обработчиком исключений.
Определение и значение
Определение содержит сайт, раздел, ключ, описание, подсказку, группу, тип данных, варианты списка, редактор, сортировку и зависимости. Значение хранится в строгом JSON.
- При создании определение и начальное значение сохраняются совместно.
- При последующем редактировании форма параметров не меняет текущее значение; основная форма сохраняет значения отдельно.
- Сайт, раздел, ключ, тип и множественность после создания неизменяемы.
- При изменении вариантов списка сервис проверяет текущее значение; нельзя без подготовки удалить используемый код.
warning
Отдельные формы для параметров и значений не означают разных прав доступа. Пользователь с правом W может менять и то и другое, а также удалять настройки.
HTML-форма и строгий PHP-сервис
Данные из браузера и аргументы PHP-сервиса проходят разные этапы обработки. Браузер отправляет строки, состояния флажков и выбранные элементы; SettingsTransport преобразует их в значения нужных типов.
При прямом вызове SettingsService такого преобразования ввода формы нет. Передавайте значение сразу в требуемом PHP-типе:
true/falseдляboolean, не'1'/'0';- строковый код или
nullдля одиночногоenum; - массив строковых кодов для множественного
enum, не CSV-строку; - дату
'2026-10-13'илиnull, не'13.10.2026'; - время
'12:00'илиnull; - строку для
string.
Параметр определения multiple в строгом сервисе также имеет тип bool. Пустые значения допустимы согласно таблице выше, а не произвольно взаимозаменяемы.
Родительские зависимости
Выключенный родительский переключатель скрывает дочернее поле только в административной панели. Значение остаётся доступным через API. Если от переключателя зависит вывод кнопки или блока, проверяйте его в PHP-коде.
Скрытие глобального раздела также не заменяет проверку доступа к данным.