Тема
Blueprint: Настройки сайта (Settings)
Когда применять
Редактируемые в админке параметры без собственной сущности: телефон, e-mail, адрес, режим работы, соцсети, реквизиты, коды счётчиков, тексты футера.
Не применять для: конфигурации приложения (config/*.php + env), данных со структурой списка (соцсети с иконками и сортировкой при 5+ — уже маленькая модель).
Состав решения
- Класс настроек
App\Settings\GeneralSettings(spatie/laravel-settings) + миграция настроек - Filament-страница
ManageGeneralSettings(filament plugin для spatie/settings) - Blade-доступ через инъекцию класса (view composer для футера/шапки)
Структура (пример минимума)
| Свойство | Тип | Примечание |
|---|---|---|
| phone | string | вывод + tel: ссылка (нормализованный номер отдельным геттером) |
| string | ||
| address | string | + отдельно для Schema.org LocalBusiness |
| work_hours | string | человекочитаемый; при логике «открыто сейчас» — spatie/opening-hours |
| socials | array | [{type, url}] |
| requisites | text | реквизиты в футер/доки |
| head_scripts | text | счётчики; выводить {!! !!} только из этой доверенной настройки |
Группировать по классам: 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.
Шаги
GeneralSettingsкласс + settings-миграция с дефолтами.- Filament-страница управления (группа «Настройки»).
- View composer для шапки/футера.
- Тест: страница рендерит телефон/адрес из настроек; смена настройки меняет вывод.
Чеклист приёмки
- [ ] Настройки типизированы, дефолты в миграции,
settings:migrateв деплой-потоке - [ ] Нет запросов настроек из Blade напрямую в каждом шаблоне (composer/DI)
- [ ] Секретов в настройках нет
- [ ] Смена значения в админке видна на сайте без ручного сброса кеша