filament/spatie-laravel-settings-plugin
Filament plugin to manage app settings stored with spatie/laravel-settings. Generate settings pages, build forms with Filament fields that map to your settings class properties, and automatically load/save values from the database with minimal setup.
Installation
composer require filament/spatie-laravel-settings-plugin
Publish the plugin's assets and config:
php artisan vendor:publish --provider="Filament\Settings\SettingsServiceProvider"
First Use Case
app/Providers/AppServiceProvider.php:
use Filament\Settings\Settings;
use Filament\Settings\SettingsGroup;
public function boot(): void
{
Settings::registerSettingsGroups([
SettingsGroup::make('General', 'general')
->settings([
Settings\SettingsField::make('site_name', 'string')
->label('Site Name')
->required(),
]),
]);
}
/admin/settings (or your configured Filament admin route).Where to Look First
resources/views/vendor/filament/settings directory for default blade templates.config/filament/settings.php for customization (e.g., panel placement, caching).Defining Settings Groups
General, SEO, Payments).SettingsGroup::make('SEO', 'seo')
->icon('heroicon-o-chart-bar')
->settings([
Settings\SettingsField::make('meta_title', 'string')
->label('Default Meta Title'),
Settings\SettingsField::make('meta_description', 'textarea')
->label('Default Meta Description'),
]);
Field Types and Validation
toggle, select, color, markdown_editor).SettingsField::make('max_upload_size', 'integer')
->label('Max Upload Size (MB)')
->validationRules(['min' => 1, 'max' => 50])
->default(10);
Dynamic Settings
livewire components or closures for dynamic fields:
SettingsField::make('notifications_enabled', 'toggle')
->label('Enable Notifications')
->livewire([
'callback' => fn () => [
'options' => ['email' => 'Email', 'sms' => 'SMS'],
],
]);
Accessing Settings in Code
use Spatie\LaravelSettings\Settings;
$siteName = Settings::get('general.site_name');
Settings::cacheFor(minutes: 60);
Integration with Filament Resources/Pages
use Filament\Settings\SettingsWidget;
public static function getWidgets(): array
{
return [
SettingsWidget::make(),
];
}
Settings::for() to manage environment-specific settings (e.g., Settings::for('staging')).settings.updated events to trigger actions:
event(new SettingsUpdated($group, $key, $oldValue, $newValue));
php artisan settings:migrate
Caching Issues
php artisan settings:clear-cache
Settings::cacheFor(null)).Field Type Mismatches
spatie/laravel-settings and filament/spatie-laravel-settings-plugin versions are compatible.php artisan settings:list
Permission Denied
config/filament.php for middleware and auth settings.Database Schema Conflicts
php artisan migrate
settings table, use spatie/laravel-settings's SettingsModel events.settings.updating:
Settings::updating(function (Updating $event) {
\Log::info('Setting updated:', $event->key);
});
\Log::debug(Settings::all());
Settings::set('general.site_name', 'Test') in AppServiceProvider@boot for quick testing.Custom Field Types
Filament\Settings\SettingsField to create reusable components:
class CustomField extends SettingsField
{
protected static string $view = 'filament.settings.fields.custom';
}
Override Templates
php artisan vendor:publish --tag="filament-settings-views"
resources/views/vendor/filament/settings/partials/settings-table.blade.php.API Access
use Filament\Settings\SettingsApiResource;
Route::apiResource('settings', SettingsApiResource::class);
Multi-Tenant Support
Settings::for($tenant) with spatie/laravel-multitenancy:
Settings::for(Tenant::current()->id)->get('general.site_name');
Settings::registerSettingsGroups([...])->inNavigationGroup('Custom Group');
cache_enabled to false in config/filament/settings.php for real-time updates.default() on fields to avoid null errors:
SettingsField::make('timeout', 'integer')->default(30);
How can I help you explore Laravel packages today?