Skip to content

Blueprint: Настройки сайта (Settings)

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

Редактируемые в админке параметры без собственной сущности: телефон, e-mail, адрес, режим работы, соцсети, реквизиты, коды счётчиков, тексты футера.

Не применять для: конфигурации приложения (config/*.php + env), данных со структурой списка (соцсети с иконками и сортировкой при 5+ — уже маленькая модель).

Состав решения

  • Класс настроек App\Settings\GeneralSettings (spatie/laravel-settings) + миграция настроек
  • Filament-страница ManageGeneralSettings (filament plugin для spatie/settings)
  • Blade-доступ через инъекцию класса (view composer для футера/шапки)

Структура (пример минимума)

СвойствоТипПримечание
phonestringвывод + tel: ссылка (нормализованный номер отдельным геттером)
emailstring
addressstring+ отдельно для Schema.org LocalBusiness
work_hoursstringчеловекочитаемый; при логике «открыто сейчас» — spatie/opening-hours
socialsarray[{type, url}]
requisitestextреквизиты в футер/доки
head_scriptstextсчётчики; выводить {!! !!} только из этой доверенной настройки

Группировать по классам: GeneralSettings, SeoSettings, IntegrationSettings — не сваливать 30 полей в один класс.

Правила реализации

  • spatie/laravel-settings, а не таблица key-value: типизация, дефолты, миграции настроек, автокеш. Классы настроек инжектятся через DI как обычные зависимости.
  • Blade: не дёргать настройки в каждом шаблоне — view composer на layout-фрагменты (footer, header) или переменные из контроллера.
  • Кеш настроек — встроенный в пакет; после деплоя с новыми полями — settings:migrate (миграции настроек в общий поток миграций).
  • head_scripts — единственное место сырого HTML в head; в Filament — Textarea с helperText-предупреждением.
  • Не хранить секреты интеграций (API-ключи) в настройках админки — им место в .env: админ-панель не должна раскрывать ключи.

Пакеты

spatie/laravel-settings + filament/spatie-laravel-settings-plugin.

Шаги

  1. GeneralSettings класс + settings-миграция с дефолтами.
  2. Filament-страница управления (группа «Настройки»).
  3. View composer для шапки/футера.
  4. Тест: страница рендерит телефон/адрес из настроек; смена настройки меняет вывод.

Чеклист приёмки

  • [ ] Настройки типизированы, дефолты в миграции, settings:migrate в деплой-потоке
  • [ ] Нет запросов настроек из Blade напрямую в каждом шаблоне (composer/DI)
  • [ ] Секретов в настройках нет
  • [ ] Смена значения в админке видна на сайте без ручного сброса кеша

Внутренняя база знаний студии