1. Go to this page and download the library: Download npabisz/laravel-settings library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
npabisz / laravel-settings example snippets
// Get value of `is_gamer` setting
$user->settings->get('is_gamer');
// Set value of `games_count` setting
$user->settings->set('games_count', 10);
// Get user address object
$address = $user->settings->get('address');
echo "User is from $address->city";
enum Settings: string {
case ApiMode = 'api_mode';
case Enabled = 'enabled';
}
enum ApiMode: string {
case Production = 'production';
case Sandbox = 'sandbox';
}
$user->settings->set(Settings::ApiMode, ApiMode::Production);
// Check if article is premium
$article->settings->get('is_premium');
use Npabisz\LaravelSettings\Facades\Settings;
// Get global website setting value
$value = Settings::get('api_mode');
// Update global website setting value
Settings::set('api_mode', 'production');
// Access to the Setting model
$settingModel = Settings::setting('api_mode');
$settingModel->delete();
// Get all global website settings models
$settingModels = Settings::all();
// Get all global website settings models,
// but filling the missing ones with default values
$settingModels = Settings::allWithDefaults();
foreach ($settingModels as $setting) {
if (null === $setting->id) {
// This one isn't existing in database
// and has default value based on definition
}
}
use Npabisz\LaravelSettings\Facades\Settings;
// Local scope for model
$model = User::first();
$userSettings = Settings::scope($model);
// Get user setting value
$value = $userSettings->get('is_newsletter_opted_in');
// Set user setting value
$userSettings->set('is_newsletter_opted_in', true);
// You can use any model which implements HasSettings trait
// Local scope for article
$article = Article::first();
$articleSettings = Settings::scope($article);
// Get article setting value
$articleSettings->get('enable_promo_banner');
// Set article setting value
$articleSettings->set('enable_promo_banner', true);
use Npabisz\LaravelSettings\Facades\Settings;
// Global scope for model
$user = User::first();
Settings::scopeGlobal($user);
// Now you can call magic method and
// it will return SettingsContainer
// for scoped user
Settings::user()->get('is_gamer');
Settings::user()->set('is_gamer', false);
// Replace scope
$anotherUser = User::find(2);
Settings::scopeGlobal($anotherUser);
// Now settings returned by user()
// method belongs to $anotherUser
Settings::user()->set('is_gamer', true);
// You can scope any model which
// has HasSettings trait
$article = Article::first();
Settings::scopeGlobal($article);
// Now you can access them via
// magic method named after class name
Settings::article()->get('is_premium');
use Npabisz\LaravelSettings\Models\AbstractSetting;
class Setting extends AbstractSetting
{
/**
* @return array
*/
public static function getSettingsDefinitions (): array
{
return [
[
// Setting name which will be unique
'name' => 'api_mode',
// Default value for setting
'default' => 'sandbox',
// You can optionally specify valid values
'options' => [
'production',
'sandbox',
],
],
[
// Another setting name
'name' => 'is_enabled',
// You can optionally specify setting cast
'cast' => 'bool',
// Default value for setting
'default' => false,
],
[
// Another setting name
'name' => 'address',
// You can use classes which will be stored as json
'cast' => Address::class,
],
];
}
}
use Npabisz\LaravelSettings\Models\BaseSetting;
class Address extends BaseSetting
{
/**
* @var string
*/
public string $street;
/**
* @var string
*/
public string $zipcode;
/**
* @var string
*/
public string $city;
public function __construct ()
{
// You can specify default values
$this->street = '';
$this->zipcode = '';
$this->city = '';
}
/**
* This method will be used to populate
* data from json object.
*
* @param array $data
*/
public function fromArray (array $data)
{
$this->street = $data['street'] ?? '';
$this->zipcode = $data['zipcode'] ?? '';
$this->city = $data['city'] ?? '';
}
/**
* @return array
*/
public function toArray (): array
{
return [
'street' => $this->street,
'zipcode' => $this->zipcode,
'city' => $this->city,
];
}
}
enum Settings: string {
case ApiMode = 'api_mode';
case Enabled = 'enabled';
}
enum ApiMode: string {
case Production = 'production';
case Sandbox = 'sandbox';
}
use Npabisz\LaravelSettings\Models\AbstractSetting;
use App\Enums\Settings;
use App\Enums\ApiMode;
class Setting extends AbstractSetting
{
/**
* @return array
*/
public static function getSettingsDefinitions (): array
{
return [
[
'name' => Settings::ApiMode,
'default' => ApiMode::Sandbox,
'enum' => ApiMode::class,
],
[
'name' => Settings::Enabled,
'cast' => 'bool',
'default' => false,
]
];
}
}
use Npabisz\LaravelSettings\Models\AbstractSetting;
class Setting extends AbstractSetting
{
/**
* @return array
*/
public static function getSettingsDefinitions (): array
{
return [
[
'name' => 'display_name',
'is_nullable' => true,
]
];
}
}
use Npabisz\LaravelSettings\Traits\HasSettings;
class User extends Authenticatable
{
use HasSettings;
...
/**
* @return array
*/
public static function getSettingsDefinitions(): array
{
return [
[
'name' => 'theme_mode',
'default' => 'light',
'options' => [
'light',
'dark',
],
],
[
'name' => 'is_gamer',
'cast' => 'bool',
],
[
'name' => 'games_count',
'cast' => 'int',
],
];
}
}
use Npabisz\LaravelSettings\Facades\Settings;
// Assuming user is logged in
Settings::user()->get('is_gamer');
Settings::user()->set('games_count', 10);
// You can also access settings via property
$user->settings->get('is_gamer');
$user->settings->set('games_count', 10);