Obullo / Config

Build Status Software License

Uygulamanızdaki konfigürasyon dosyalarını okuyarak konfigürasyon yönetimi üstlenen bağımsız bir pakettir.

Yükleme

$ composer require obullo/config

Minumum gereksinim

Bu versiyon php dilinin aşağıdaki sürümlerini destekler.

Test etme

$ vendor/bin/phpunit

Başlangıç

Örnel bir .yaml konfigürasyon dosyası.

# amqp
# 

amqp:
    host: 127.0.0.1
    port: 5672
    username: '%env(AMQP_USERNAME)%'
    password: '%env(AMQP_PASSWORD)%'
    vhost: /

Uygulama konfigürasyonu

require '../vendor/autoload.php';

define('ROOT', '/var/www/');
putenv('AMQP_USERNAME', 'guest');
putenv('AMQP_PASSWORD', 'guest');

use Obullo\Config\Cache\FileHandler;
use Obullo\Config\Reader\YamlReader;
use Obullo\Config\Loader;

$cacheHandler = new FileHandler('/path/to/cache/folder');

Konfigürasyon dosyası

$loader = new Loader;
$loader->registerReader('yaml', new YamlReader($cacheHandler));

$amqp = $loader->load(ROOT, '/config/amqp.yaml', true)
        ->amqp;

echo $amqp->host; // 127.0.0.1
echo $amqp->port; // 5672
echo $amqp->username;  // guest
echo $amqp->password;  // guest
echo $amqp->vhost;  // "/"

Önbellekleme

Yüklenen her bir dosya belirtilen önbellekleme işleyicisi ile önbelleğe alınır ve değişiklik yaptığınızda bu önbellek tazelenir. Böylece her defasında bu dosyalar için çözümleme işlemi yapılmamış olur.

Önbellek sınıfları

Varsayılan sürücü FileHandler sınıfıdır. Eğer önbellek işleyici FileHandler olarak ayarlanmışsa yazma işlemlerinin yürütülebilmesi için belirtilen dizine yazma izni verilmesi gerekir.

Ortam Değişkeni

Bir klasör yolu içerisinde '%s' değişkeni kullandığınızda bu değişken APP_ENV değeri ile değiştirilir.

/config/%s/amqp.yaml
/config/dev/amqp.yaml  // after replacement

Ortam değişkeni setEnv metodu ile ayarlanabilir.

$loader = new Loader;
$loader->setEnv(getenv('APP_ENV'));
$loader->registerReader('yaml', new YamlReader($cacheHandler));

$amqp = $loader->load(ROOT, '/config/%s/amqp.yaml', true)
        ->amqp;

echo $amqp->host; // 127.0.0.1
echo $amqp->port; // 5672
echo $amqp->username;  // guest
echo $amqp->password;  // guest
echo $amqp->vhost;  // "/"

getenv() fonksiyonu

Dosya içerisindeki tanımlı olan '%env()%' fonksiyonları için her defasında doğal php getenv() metodu çalıştırılır.

# amqp
# 

amqp:
    host: 127.0.0.1
    port: 5672
    username: '%env(AMQP_USERNAME)%'
    password: '%env(AMQP_PASSWORD)%'
    vhost: /

Env değişkenleri atamak için putenv('VARIABLE=VALUE') metodunu yada bunun için daha kapsamlı olan vlucas/phpdotenv paketini kullanabilirsiniz.

Konfigurasyon değişkenleri

Aşağıdaki gibi bazı durumlarda bir konfigürasyon dosyası içerisinde dinamik değişkenler kullanmanız gerekir.

# cache
# 

dir: '%root%/var/cache/'

Bu durumda addVariable() metodu ile okuyucu sınıfınıza bu değişkenleri önceden tanımlanız gerekir.

$reader = new YamlReader($cacheHandler);
$reader->addVariable('%root%', ROOT);
$reader->addVariable('%foo%','bar');

Dosyaları tek tek yüklemek

Örnek bir .yaml dosyası

# routes
#

home:
    method: GET
    path: /
    handler: App\Controller\DefaultController::index

Dizi türünde okuma

$routes = $loader->load(ROOT, '/config/routes.yaml');

echo $routes['home']->method; // GET
echo $routes['home']->path; // "/""
echo $routes['home']->handler; // App\Controller\DefaultController::index

Nesne türüne dönüştürme için ikinci parametreden true değeri göndermeniz gerekir.

$routes = $loader->load(ROOT, '/config/routes.yaml', true)

echo $routes->home->method; // GET
echo $routes->home->path; // "/""
echo $routes->home->handler; // App\Controller\DefaultController::index

Dosyaları bir kerede yükleme

Eğer uygulama başlatıldığında bazı konfigürasyon dosyalarını toplu olarak yüklemeniz gerekiyor ise tek tek yüklemek yerine bunun için aşağıdaki yöntemi izleyebilirsiniz.

$loader = new Loader;
$loader->setEnv(getenv('APP_ENV'));
$loader->registerReader('yaml', new YamlReader($cacheHandler));

// Put all config files here you want to load at bootstrap.

$config = $loader->loadFiles(
    [
        ROOT.'/config/%s/framework.yaml',
        ROOT.'/config/%s/database.yaml',
    ],
    true
);