jobmetric / laravel-setting
This is a package for a dynamic setting across different Laravel projects.
Fund package maintenance!
Requires
- php: >=8.0.1
- jobmetric/laravel-event-system: ^2.8
- jobmetric/laravel-form: ^1.6
- jobmetric/laravel-package-core: ^1.34
- laravel/framework: >=9.19
README
Laravel Setting
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.
Why Laravel Setting?
Form-Driven Settings
Define each setting form by extending JobMetric\Setting\Contracts\AbstractSetting and returning a JobMetric\Form\FormBuilder that describes fields.
Application-Key Storage
Each setting form produces a stable formName() (application_key). Values are stored per field under that form.
Fast Reads with Cache
Reads are cached under config('setting.cache_key') (default: SETTING). Cache is invalidated whenever settings are stored or forgotten.
Events and Lifecycle Control
Optionally fire StoreSettingEvent and ForgetSettingEvent when storing or deleting settings.
Namespaced Discovery
Register one or more namespaces in SettingNamespaceRegistry. SettingRegistry can discover and validate all AbstractSetting subclasses inside them.
What is a Setting Form?
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).
What Awaits You?
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
Quick Start
Install Laravel Setting via Composer:
composer require jobmetric/laravel-setting
Run migrations:
php artisan migrate
Create 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.
Usage
Store settings by form name (raw)
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', ]);
Store settings by setting class (validated)
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', ]);
Read settings
use JobMetric\Setting\Facades\Setting; $siteName = Setting::get('app_config_site_name'); $form = Setting::form('app_config');
Read from a setting class
use JobMetric\Setting\Facades\Setting; use App\Settings\ConfigSetting; $siteName = Setting::getFromClass(ConfigSetting::class, 'site_name'); $form = Setting::getFromClass(ConfigSetting::class, null);
Forget settings (delete + cache invalidation)
use JobMetric\Setting\Facades\Setting; Setting::forget('app_config');
Clear cache
php artisan setting:clear
Documentation
Ready to transform your Laravel applications? Our comprehensive documentation is your gateway to mastering Laravel Setting:
📚 Read Full Documentation ->
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
Contributing
Thank you for participating in laravel-setting. A contribution guide can be found here.
License
The laravel-setting is open-sourced software licensed under the MIT license. See License File for more information.