mxrvx/schema-system-settings

System Settings Schema Builder for MODX Revolution

Maintainers

👁 vgrish

Package info

github.com/mxrvx/schema-system-settings

Chat

Documentation

pkg:composer/mxrvx/schema-system-settings

Statistics

Installs: 84

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.10 2025-06-26 12:46 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 322ebcea98cea45a83c988d603cf509e56931ac4

  • Vgrish <vgrish.woop@gmail.com>

modxrevolution

This package is auto-updated.

Last update: 2026-06-19 12:11:57 UTC


README

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.