Build Dynamic Settings. Manage Them Safely.
Laravel Setting lets you define application settings as form-driven classes and store/retrieve them from a database-backed cache. Stop scattering config values across controllers and configs. Use a unified settings layer with validation, caching, discovery, and clear storage keys.
Define each setting form by extending JobMetric\Setting\Contracts\AbstractSetting and returning a JobMetric\Form\FormBuilder that describes fields.
Each setting form produces a stable formName() (application_key). Values are stored per field under that form.
Reads are cached under config('setting.cache_key') (default: SETTING). Cache is invalidated whenever settings are stored or forgotten.
Optionally fire StoreSettingEvent and ForgetSettingEvent when storing or deleting settings.
Register one or more namespaces in SettingNamespaceRegistry. SettingRegistry can discover and validate all AbstractSetting subclasses inside them.
A setting form is a class that extends AbstractSetting and implements:
application()key()title()description()form()(returnsFormBuilder)
From these, formName() is built as application() . '_' . key() and used as the main storage identifier (form column in the settings table).
By adopting Laravel Setting, you can:
- Create setting form classes with
setting:make - Store values safely with
Setting::dispatch()(class-based) orSetting::dispatchByForm()(raw) - Retrieve values with
Setting::get(),Setting::form()and class helpers likeSetting::getFromClass() - Invalidate cache via
setting:clear - Discover all setting forms through
SettingNamespaceRegistryandSettingRegistry - Listen to store/forget events with optional dispatching control
Install Laravel Setting via Composer:
composer require jobmetric/laravel-settingRun migrations:
php artisan migrateCreate a setting form class:
php artisan setting:make ConfigSetting --application=app --title="Config" --description="Application configuration"Edit the generated class and implement form() by adding the desired fields using FormBuilder.
Use dispatchByForm() (or the dispatchSetting() helper). Keys in the object must start with the form prefix ({application_key}_...).
use JobMetric\Setting\Facades\Setting;
Setting::dispatchByForm('app_config', [
'app_config_site_name' => 'My Site',
'app_config_site_url' => 'https://example.com',
]);Or via helper:
dispatchSetting('app_config', [
'app_config_site_name' => 'My Site',
]);Use dispatch() (or dispatchSettingFromClass()) for class-based dispatch with DTO validation via FormBuilderRequest.
use JobMetric\Setting\Facades\Setting;
use App\Settings\ConfigSetting;
Setting::dispatch(ConfigSetting::class, [
'site_name' => 'My Site',
]);use JobMetric\Setting\Facades\Setting;
$siteName = Setting::get('app_config_site_name');
$form = Setting::form('app_config');use JobMetric\Setting\Facades\Setting;
use App\Settings\ConfigSetting;
$siteName = Setting::getFromClass(ConfigSetting::class, 'site_name');
$form = Setting::getFromClass(ConfigSetting::class, null);use JobMetric\Setting\Facades\Setting;
Setting::forget('app_config');php artisan setting:clearReady to transform your Laravel applications? Our comprehensive documentation is your gateway to mastering Laravel Setting:
The documentation includes:
- Getting Started - installation and migration steps
- Setting Forms -
AbstractSetting,formName(), andFormBuilder - Setting Service - storing, forgetting, cache invalidation, and retrieval APIs
- Registries -
SettingNamespaceRegistryandSettingRegistrydiscovery rules - Commands -
setting:make,setting:clear - Events -
StoreSettingEventandForgetSettingEvent - Helpers -
dispatchSetting,dispatchSettingFromClass, and read/exists utilities - Testing - package tests and common verification flows
Thank you for participating in laravel-setting. A contribution guide can be found here.
The laravel-setting is open-sourced software licensed under the MIT license. See License File for more information.