[Из песочницы] Мой взгляд на файлы настроек yii 2

Решил поделиться отлаженной и удобной для меня схемой подключения файлов настроек (папка /config), которую я использую во всех своих проектах на yii 2 basic.

Суть


Свою идею я хочу продемонстрировать на примере папки /config одного из моих текущих проектов:

  • bootstrap.php — «Предпусковые» настройки для боевого сервера.
  • bootstrap.local.php — «Предпусковые» настройки для локального сервера.
  • defaults.php — Настройки по умолчанию боевого сервера.
  • defaults.local.php — Настройки по умолчанию локального сервера.
  • defaults.local.example — Образец настроек, чтобы можно было быстрее создать настройки локального сервера.
  • console.php — Настройки консоли боевого сервера.
  • web.php — Настройки web приложения боевого сервера.
  • .gitignore — Правила игнорирования локальных настроек при работе с git репозитарием.


Как видно из структуры файлов, настройки разделяются на локальные и серверные.

Описание


Подключение настроек начинается с файла /web/index.php, в котором подключаются необходимые конфигурации и сливаются в одну:

run();


Файл /config/bootstrap.php отвечает за «предпусковые» настройки боевого сервера:



Как видно из участка кода, полезной информации в файле обычно нет, но в нем присутствует код отвечающий за проверку и подключение локальных файлов. Такой подход позволяет не беспокоится о наличии этих файлов.

Файл /config/bootstrap.local.php отвечает за «предпусковые» настройки для локального сервера:



Файл /config/defaults.php отвечает за настройки боевого сервера по умолчанию и обычно содержит настройки подключения к базе данных и другие глобальные настройки приложения (из файла были убраны некоторые настройки для наглядности):

 dirname(__DIR__),
        'timeZone' => 'UTC',

        'components' => [
                'db' => [
                        'class' => 'yii\db\Connection',
                        'dsn' => 'mysql:host=localhost;dbname=webulla',
                        'username' => 'webulla',
                        'password' => 'password',
                        'charset' => 'utf8',
                        'tablePrefix' => '',
                        'enableSchemaCache' => true,
                        'enableQueryCache' => true,
                ],
        ],
];

// настройки локальной машины
$path_local = __DIR__ . '/defaults.local.php';
if(file_exists($path_local)) {
        $defaults = \yii\helpers\ArrayHelper::merge($defaults, require $path_local);
}

return $defaults;


Файл /config/defaults.local.php отвечает за настройки локального сервера по умолчанию и переопределяет настройки подключения к базе данных:

 [
                'db' => [
                        'dsn' => 'mysql:host=localhost;dbname=webulla',
                        'username' => 'root',
                        'password' => '',
                ]
        ],
];


На примере файлов /config/defaults.php и /config/defaults.local.php настраиваются файлы настроек консоли и веб окружения.

Файл /config/.gitignore отвечает то, чтобы локальные настройки не вылились на сервер:

# ignore local configs
*.local.php


Заключение


Такой подход позволяет мне просто и быстро править настройки на локальном и боевом сервере. При использовании git репозитария это еще больше упрощает жизнь: не нужно беспокоиться о том, что какие-то локальные настройки улетят на сервер.

© Habrahabr.ru