1. Go to this page and download the library: Download caseyamcl/settings-manager 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/ */
caseyamcl / settings-manager example snippets
use SettingsManager\Model\AbstractSettingDefinition;
use SettingsManager\Exception\InvalidSettingValueException;
use SettingsManager\Registry\SettingDefinitionRegistry;
// 1. Create setting definition:
/**
* Settings must implement the SettingDefinition interface.
*
* For convenience, an AbstractSettingDefinition class is bundled with the library.
*/
class MySetting extends AbstractSettingDefinition
{
// Required; This is the machine name, and it is recommended that you stick to machine-friendly names (alpha-dash, underscore)
public const NAME = 'my_setting';
// Required; This is the "human friendly" name for the setting
public const DISPLAY_NAME = 'My Setting';
// Internal notes (optional)
public const NOTES = "These are notes that are either available to all users or just admins (implementor's choice)";
// Set an optional default (may need to override the getDefault() method if complex logic is }
return $value;
}
}
// 2. Add it to the registry:
$registry = new SettingDefinitionRegistry();
$registry->add(new MySetting());
// etc. add more values...
use SettingsManager\Provider\CascadingSettingProvider;
use SettingsManager\Provider\DefaultValuesProvider;
use SettingsManager\Provider\ArrayValuesProvider;
use SettingsManager\Registry\SettingDefinitionRegistry;
// Setup a registry and add settings to it...
$registry = new SettingDefinitionRegistry();
$registry->add(new MySetting());
// An array of setting values
$settingValues = [
'my_setting' => 'test'
];
// Setup the provider
$provider = new CascadingSettingProvider([
new DefaultValuesProvider($registry), // loads default values
new ArrayValuesProvider($settingValues, $registry), // loads values from an array
]);
// Get values from the provider..
$provider->findValue('my_setting'); // returns 'test'
$provider->getValue('my_setting'); // returns 'test' (would throw an exception if value isn't defined)
// If you want to get the `SettingValue` instance (with metadata), use
// `findValueInstance` or `getValueInstance`
$provider->getValueInstance('my_setting')->getValue();
$provider->findValueInstance('my_setting')->getValue();
// `getValue` throws an exception if the requested setting isn't defined
$provider->getValue('non_existent_value'); // Throws UndefinedSettingException
// `findValue()` returns NULL if the requested setting isn't defined
$provider->findValue('non_existent_value'); // returns NULL
use SettingsManager\Provider\ArrayValuesProvider;
use SettingsManager\Provider\DefaultValuesProvider;
use SettingsManager\Provider\SettingRepositoryProvider;
use SettingsManager\Provider\CascadingSettingProvider;
use SettingsManager\Registry\SettingDefinitionRegistry;
use MyApp\MySettingRepository;
use MyApp\SensitivePasswordSetting;
// Setup a registry and add settings to it...
$registry = new SettingDefinitionRegistry();
$registry->add(new SensitivePasswordSetting());
// Method #1 - Key/value pairs
$values = [
'sensitive_password' => '11111',
'another_setting' => 123,
// etc..
];
// Method #2
$values = [
'sensitive_password' => [
'value' => '11111',
'mutable' => false // downstream providers won't be able to override this setting
],
'another_setting' => [
'value' => 123,
'mutable' => true // downstream providers WILL be able to override this setting
]
];
// Mix and match methods #1 and #2
$values = [
'sensitive_password' => '11111',
'another_setting' => [
'value' => 123,
'mutable' => true
]
];
$provider = CascadingSettingProvider::build(
new DefaultValuesProvider($registry),
new ArrayValuesProvider($values, $registry, 'config_file'),
new SettingRepositoryProvider(new MySettingRepository())
);
$provider->getValueInstance('sensitive_password')->getProviderName(); // will always be 'config_file'
use SettingsManager\Contract\SettingRepository;
use SettingsManager\Exception\SettingValueNotFoundException;
use SettingsManager\Provider\SettingRepositoryProvider;
class MySettingRepository implements SettingRepository
{
/**
* @var MyDatabaseProvider
*/
private $dbConnection;
/**
* MySettingRepository constructor.
* @param MyDatabaseProvider $dbConnection
*/
public function __construct(MyDatabaseProvider $dbConnection)
{
$this->dbConnection = $dbConnection;
}
/**
* Find a setting value by its name or NULL if it is not found
*
* @param string $settingName
* @return mixed|null
*/
public function findValue(string $settingName)
{
return $this->dbConnection->findValue($settingName);
}
/**
* Get a setting value by its name or throw an exception if not found
*
* @param string $settingName
* @return mixed
* @throws SettingValueNotFoundException
*/
public function getValue(string $settingName)
{
if ($this->dbConnection->hasValue($settingName)) {
return $this->findValue($settingName);
} else {
throw SettingValueNotFoundException::fromName($settingName);
}
}
/**
* List values
*
* @return iterable|mixed[]
*/
public function listValues(): iterable
{
return $this->dbConnection->listValues();
}
}
// Then, use the `SettingRepositoryProvider`
$repository = new MySettingRepository($dbConn);
$provider = new SettingRepositoryProvider($repository);
use SettingsManager\Contract\SettingProvider;
class MyServiceClass {
/**
* @var SettingProvider
*/
private $settings;
/**
* MyServiceClass constructor.
* @param SettingProvider $provider
*/
public function __construct(SettingProvider $provider)
{
$this->settings = $provider;
}
public function doSomethingThatRequiresLookingUpASetting(): void
{
// Always lookup the setting value during runtime
$settingValue = $this->settings->getValue('some_setting');
// do stuff here..
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.