Skip to content

mxrvx/schema-system-settings

Repository files navigation

System Settings Schema Builder for MODX Revolution

Installation and configuration

Install the package via composer:

composer require --dev mxrvx/schema-system-settings

PHP Latest Version on Packagist License Total Downloads

Configuration

declare(strict_types=1);

use MXRVX\Schema\System\Settings;
use MXRVX\Schema\System\Settings\TypeCaster;

require_once \dirname(__DIR__, 1) . '\vendor\autoload.php';

$schema = Settings\Schema::define('app-namespace')
    ->withSettings(
        [
            Settings\Setting::define(
                key: 'key1',
                value: 1,
                xtype: 'combo-boolean',
                area: 'system',
                typecast: TypeCaster::BOOLEAN,
            ),
            Settings\Setting::define(
                key: 'key2',
                value: 'string',
                xtype: 'textfield',
                area: 'system',
                typecast: TypeCaster::STRING,
            ),
            Settings\Setting::define(
                key: 'key3',
                value: '312341241234',
                xtype: 'textfield',
                area: 'system',
                typecast: TypeCaster::INTEGER,
            ),
            Settings\Setting::define(
                key: 'key4',
                value: ['services' => ['github', 'bitbucket', 'google']],
                xtype: 'textfield',
                area: 'services',
                typecast: TypeCaster::ARRAY,
            ),
            Settings\Setting::define(
                key: 'key5',
                value: ['services' => ['github', 'bitbucket', 'google']],
                xtype: 'textfield',
                area: 'services',
                typecast: TypeCaster::JSON,
            ),
            Settings\Setting::define(
                key: 'key6',
                value: '1,2,3',
                xtype: 'textfield',
                area: 'services',
                typecast: [TypeCaster::STRING, TypeCaster::LIST_INTEGER],
            ),
        ]
    );

We can now create config after defining the scheme

/** @var \MXRVX\Schema\System\Settings\Schema $schema */
/** @var \MXRVX\Schema\System\Settings\SchemaConfig */
$schemaConfig = SchemaConfig::define($schema)->withConfig($config);

Usage

/** @var \MXRVX\Schema\System\Settings\SchemaConfig $schemaConfig */

//NOTE get setting value
$value = $schemaConfig->getSettingValue('key1');

//NOTE set setting value
$schemaConfig->setSettingValue('key1', $newValue);

//NOTE get all settings as array
var_export($schemaConfig->getSettingsArray(processValue: true));

array (
  'key1' => 
  array (
    'key' => 'app-namespace.key1',
    'value' => true,
    'xtype' => 'combo-boolean',
    'area' => 'system',
    'typecast' => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\BooleanCaster',
  ),
  'key2' => 
  array (
    'key' => 'app-namespace.key2',
    'value' => 'string',
    'xtype' => 'textfield',
    'area' => 'system',
    'typecast' => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\StringCaster',
  ),
  'key3' => 
  array (
    'key' => 'app-namespace.key3',
    'value' => 312341241234,
    'xtype' => 'textfield',
    'area' => 'system',
    'typecast' => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\IntegerCaster',
  ),
  'key4' => 
  array (
    'key' => 'app-namespace.key4',
    'value' => 
    array (
      'services' => 
      array (
        0 => 'github',
        1 => 'bitbucket',
        2 => 'google',
      ),
    ),
    'xtype' => 'textfield',
    'area' => 'services',
    'typecast' => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\ArrayCaster',
  ),
  'key5' => 
  array (
    'key' => 'app-namespace.key5',
    'value' => '{"services":["github","bitbucket","google"]}',
    'xtype' => 'textfield',
    'area' => 'services',
    'typecast' => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\JsonCaster',
  ),
  'key6' => 
  array (
    'key' => 'app-namespace.key6',
    'value' => 
    array (
      0 => 1,
      1 => 2,
      2 => 3,
    ),
    'xtype' => 'textfield',
    'area' => 'services',
    'typecast' => 
    array (
      0 => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\StringCaster',
      1 => 'MXRVX\\Schema\\System\\Settings\\TypeCasters\\ListIntegerCaster',
    ),
  ),
)

Feedback

I will be glad to see your ideas, suggestions and questions in issues.

About

System Settings Schema Builder for MODX Revolution

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages