PHPackages                             ceive/settings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ceive/settings

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ceive/settings
==============

A Abstract Layoer for access to settings

06PHP

Since Jul 10Pushed 7y ago1 watchersCompare

[ Source](https://github.com/Ceive/settings)[ Packagist](https://packagist.org/packages/ceive/settings)[ RSS](/packages/ceive-settings/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (1)Used By (0)

Abstract Layer for settings on your project
===========================================

[](#abstract-layer-for-settings-on-your-project)

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

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

```
$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):

```
$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:

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

    'myImportantOption' => 'value'

    //...
]);

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

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

```

example for transport an one option:

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

    //...
]);

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

$setting = $schema->getSetting('mySettingKey');
if( $autocomplete = $setting->autocomplete ){
    ?>
