2016-06-20 4 views
-1

Я пишу фреймворк и просто добавил пространства имен. У меня не было проблем с преобразованием всего, за исключением значений конфигурации.Определение значений конфигурации в определенных пространствах имен?

Я могу легко определить константы, поэтому одиночные значения не являются проблемой ... но как насчет массива значений?

Возьмите этот массив, например, который является массивом настроек, чтобы добавить подключение к капсуле ...

[ 
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'DB_NAME', 
    'username' => 'USERNAME', 
    'password' => 'PASSWORD', 
    'charset' => 'utf8', 
    'collation' => 'utf8_general_ci', 
    'prefix' => '' 
    ] 

Я использовал файл, который выглядит, как это для конфигурации базы данных ...

<?php 

    namespace BareBones; 

    use Illuminate\Database\Capsule\Manager as Capsule; 

    $BareBonesCapsule = new Capsule; 

    $BareBonesCapsule->addConnection([ 
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'DB_NAME', 
    'username' => 'USERNAME', 
    'password' => 'PASSWORD', 
    'charset' => 'utf8', 
    'collation' => 'utf8_general_ci', 
    'prefix' => '' 
    ]); 

    $BareBonesCapsule->setAsGlobal(); 
    $BareBonesCapsule->bootEloquent(); 

    use Illuminate\Database\Schema\Blueprint as Blueprint; 
    use Illuminate\Database\Eloquent\Model as Eloquent; 

Я собираюсь начать загрузку Красноречивого от моего основного App класса. Это предотвратит выполнение глобальной переменной. Хотя маловероятно, что будет использоваться $BareBonesCapsule, я все равно хочу, чтобы моя инфраструктура была чистой и сохранила все в пространстве имен.

я мог бы объявить кучу констант в файле конфигурации ...

<?php 

    namesapce BareBones; 

    define("driver", "mysql"); 
    define("host", "localhost"); 
    define("database", "DB_NAME"); 
    /* etc... */ 

Это не кажется очень чистым, и я предполагаю, что есть лучший способ сделать это. Как другие среды справляются с этой проблемой и какие альтернативные способы настройки я поддерживаю при сохранении разделения от глобального пространства имен?

ответ

1

Вы можете использовать .ini файлы и разбить их на разделы, например, так:

; This is a sample configuration file 
; Comments start with ';', as in php.ini 

[first_section] 
one = 1 
five = 5 
animal = BIRD 

[second_section] 
path = "/usr/local/bin" 
URL = "http://www.example.com/~username" 

[third_section] 
phpversion[] = "5.0" 
phpversion[] = "5.1" 
phpversion[] = "5.2" 
phpversion[] = "5.3" 

urls[svn] = "http://svn.php.net" 
urls[git] = "http://git.php.net" 

От: http://php.net/manual/en/function.parse-ini-file.php

Symfony поддерживает XML, PHP и YML и позволяет написать свой собственный конфигурационный декодер.

Смежные вопросы