2017 © Pedro Peláez
 

library settings

A Abstract Layoer for access to settings

image

ceive/settings

A Abstract Layoer for access to settings

  • Tuesday, July 10, 2018
  • by Ceive
  • Repository
  • 1 Watchers
  • 0 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Abstract Layer for settings on your project

Пакет обеспечивает абстракцию доступа к настройкам, позволяет оперется на него для получения настроек в вашем приложении и задуман чтобы быть адаптированным под любой стек рабочего окружения на php, (*1)

Фронтенд Ceive\settings\Frontend обеспечивает возможность кеширования настроек, и требует реализации доступа к настройкам через бакенд. $settings->stateМассив(\ArrayAccess): Обеспечивается ленивая загрузка настроек из бакенда (то есть то что было загружено больше не загружается) $settings->settingsМассив(\ArrayAccess): свойство в котором хранятся загруженные из бакенда настройки, можно использовать как кеш для настроек реализовав его путем реализации интерфейса \ArrayAccess $settings->backend: Если есть фронтенд, значит есть бакенд. Бакенд обеспечивает слой релизации доступа к настройкам где бы они не были., (*2)

$schema = new settings\Schema();

$schema->section('Общее', 'general', [
    'siteName' => [
        'type'      => 'string',
        'default'   => 'Example site',
    ],
], true);
$schema->section('Настройки смс ведомлений', 'sms', [
    'notification.update' => [
        'type'      => 'string',
        'default'   => 'Example site',
    ],
]);

$a = [
    'notification.update' => true
];

$settings = new settings\Frontend();
$settings->schema = $schema;
$settings->backend = new settings\backend\Customizable(
    function($key, $value) use(&$a){
        $a[$key] = $value;
    },//set
    function($key) use(&$a){
        return isset($a[$key])?$a[$key]:null;
    },//get
    function($key) use(&$a){
        return isset($a[$key]);
    },//has
    function($key) use(&$a){
        unset($a[$key]);
    },//delete
    function($limit=null, $offset=null, $query=null) use(&$a){
        return $a;
    }//list
);

$settings['notification.update'] = false; // set to settings

$array = $settings->toArray();

echo $settings['notification.update']; // use settings

Smart defaults(Yii integration example):, (*3)

$schema = new settings\Schema();
$schema->setting('mySettingKey', [
    'type' => 'string',
    'default' => function($key, settings\SettingsAbstract $settings){
        return Yii::$app->settings->has($key)
            ?Yii::$app->settings->get($key)
            :Yii::$app->params['config'][$key]
    }
]);

transport an options through some settings:, (*4)

$schema->setting('mySettingKey', [
    //...

    'myImportantOption' => 'value'

    //...
]);


////////////////////////////////////////////////////////////////////////
///// OTHER CODE


$setting = $schema->getSetting('mySettingKey');
$importantValue = $setting->myImportantOption;

example for transport an one option:, (*5)

$schema->setting('mySettingKey', [
    //...
    'type' => 'string'
    'autocomplete' => [
        'val1' => 'String1',
        'val1' => 'String2',
        'val1' => 'String3',
        'val1' => 'String4',
    ]

    //...
]);


////////////////////////////////////////////////////////////////////////
///// OTHER CODE


$setting = $schema->getSetting('mySettingKey');
if( $autocomplete = $setting->autocomplete ){
    ?> <select>
    <? foreach($autocomplete as $value=>$title){ ?><option value="<?= $value?>"><?= $title?></option><? }?>

    </select> <?
}

schema`s settings mapping, (*6)

$schema->map(, function($key, Setting $setting, $sectionKey, Section $section, Schema $schema){
    // onSetting
},function($doSettings, $sectionKey, Section $section, $schema){
    // onSection (optionaly: default null)
    // call $doSettings() here
}, function($key, Setting $setting, $sectionKey, Section $section, Schema $schema){
    // filter (optionaly: default null)
});

example for schema`s settings mapping, (*7)

$schema->map(function($key, Setting $setting, $sectionKey, Section $section, Schema $schema){
    // onSetting
}, function($doSettings, $sectionKey, Section $section, Schema $schema){
    // onSection (abort if returned false)
    ?>
    <section>
        <div>
            <h1><?= $section->title?></h1>
        </div>
        <div><? $doSettings() ?></div>
    </section>
    <?
}, function($key, Setting $setting, $sectionKey, Section $section, Schema $schema){
    // filter optionaly
});

example for schema`s settings mapping and try use options transport through setting, (*8)

$schema->map(function($key, Setting $setting, $sectionKey, Section $section, Schema $schema) use($settings){
    // onSetting
    if($setting->autocomplete){
        ?> <select name="<?=$key?>">
            <? foreach($autocomplete as $value=>$title){ ?><option value="<?= $value?>"><?= $title?></option><? }?>
        </select> <?
    }else{
        ?> <input type="<?=$setting->type?>" name="<?=$key?>" value="<?= $settings[$key]?>"/> <?
    }
}, null, null);

Or use mapper object, (*9)


$mapper = new \stdClass(); //$mapper->onSection = null; $mapper->onSetting = function($key, Setting $setting, $sectionKey, Section $section, Schema $schema) use($settings){ // onSetting if($setting->autocomplete){ ?> <select name="<?=$key?>"> <? foreach($autocomplete as $value=>$title){ ?><option value="<?= $value?>"><?= $title?></option><? }?> </select> <? }else{ ?> <input type="<?=$setting->type?>" name="<?=$key?>" value="<?= $settings[$key]?>"/> <? } }; $mapper->filter = function(){}; $schema->mapper($mapper);

The Versions

10/07 2018

dev-master

9999999-dev

A Abstract Layoer for access to settings

  Sources   Download

The Development Requires

by Avatar Lexus27