Модель настроек

Чтобы прочитать настройку, нужно знать сайт, раздел и ключ. Например, адрес подписи кнопки — s1 / base / buttonTitle.

Раздел base определяет, где находится настройка. Группа «Кнопка связи» лишь объединяет поля в интерфейсе. Тип данных описывает само значение: текст, переключатель, список, дату или время.

Тип данных, редактор и результат API

Тип данныхРезультат get()Пустое значениеРедактор
stringСтрока''input или textarea
booleantrue или falseВыключенное состояние — falsecheckbox
enum, одиночныйСтроковый код вариантаnullselect
enum, множественныйМассив строковых кодов[]Список с множественным выбором
dateСтрока YYYY-MM-DD, например '2026-10-13'nullcalendar
timeСтрока HH:MM, например '12:00'nulltime

Множественность доступна только для enum. В модели редактор списка — select; интерфейс для множественного списка использует развёрнутый выбор. Legacy select_multiple переносится как enum с множественностью, а не как отдельный тип данных.

Коды списка определяются в dataOptions.items, например ['value' => 'support', 'label' => 'Поддержка']. get() возвращает коды, а selectedOptions() — выбранные пары код/подпись.

Когда применяется default

note

Аргумент $default — резервный результат на случай, если настройка не найдена. Он не заменяет существующее значение, даже если оно пустое: false, '', null или [].

PHP
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-коде.

Скрытие глобального раздела также не заменяет проверку доступа к данным.