flamix / settings
Persistent settings in Laravel. Fork from Andreas Lutro app.
Requires
- illuminate/cache: >=8
- illuminate/support: >=8
- dev-master
- v2.0
- v1.3.0
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.0
- v0.11.3
- v0.11.2
- v0.11.1
- v0.11.0
- v0.10.0
- v0.9.0
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.15
- 0.2.14
- 0.2.13
- 0.2.12
- 0.2.11
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.2
- 0.1.1
- 0.1.0
- dev-patch-3
- dev-patch-2
- dev-patch-1
- dev-feat/composer-deps-matrix
- dev-fix-wrapdriver-custom-store
This package is auto-updated.
Last update: 2024-12-14 15:27:29 UTC
README
Persistent, application-wide settings for Laravel.
Despite the package name, this package should work with Laravel 8+ (though some versions are not automatically tested).
Installation
composer require flamix/settings
- Publish the config file by running
php artisan vendor:publish --provider="Flamix\Settings\ServiceProvider" --tag="config"
. The config file will give you control over which storage engine to use as well as some storage-specific settings.
Usage
You can either access the setting store via its facade or inject it by type-hinting towards the abstract class Flamix\Settings\SettingStore
.
<?php Setting::set('foo', 'bar'); Setting::get('foo', 'default value'); Setting::get('nested.element'); Setting::forget('foo'); // Do not forget save() after this!! $settings = Setting::all(); ?>
Call Setting::save()
explicitly to save changes made.
You could also use the setting()
helper:
// Get the store instance setting(); // Get values setting('foo'); setting('foo.bar'); setting('foo', 'default value'); setting()->get('foo'); // Set values setting(['foo' => 'bar']); setting(['foo.bar' => 'baz']); setting()->set('foo', 'bar'); // Method chaining setting(['foo' => 'bar'])->save();
Store cache
When reading from the store, you can enable the cache.
You can also configure flushing of the cache when writing and configure time to live.
Reading will come from the store, and then from the cache, this can reduce load on the store.
// Cache usage configurations. 'enableCache' => false, 'forgetCacheByWrite' => true, 'cacheTtl' => 15,
JSON storage
You can modify the path used on run-time using Setting::setPath($path)
.
Database storage
Using Migration File
If you use the database store you need to run php artisan vendor:publish --provider="Flamix\Settings\ServiceProvider" --tag="migrations" && php artisan migrate
.
Example
For example, if you want to store settings for multiple users/clients in the same database you can do so by specifying extra columns:
<?php Setting::setExtraColumns(array( 'user_id' => Auth::user()->id )); ?>
where user_id = x
will now be added to the database query when settings are retrieved, and when new settings are saved, the user_id
will be populated.
If you need more fine-tuned control over which data gets queried, you can use the setConstraint
method which takes a closure with two arguments:
$query
is the query builder instance$insert
is a boolean telling you whether the query is an insert or not. If it is an insert, you usually don't need to do anything to$query
.
<?php Setting::setConstraint(function($query, $insert) { if ($insert) return; $query->where(/* ... */); }); ?>
Custom stores
This package uses the Laravel Manager
class under the hood, so it's easy to add your own custom session store driver if you want to store in some other way. All you need to do is extend the abstract SettingStore
class, implement the abstract methods and call Setting::extend
.
<?php class MyStore extends Flamix\Settings\SettingStore { // ... } Setting::extend('mystore', function($app) { return $app->make('MyStore'); }); ?>