Решил поделиться отлаженной и удобной для меня схемой подключения файлов настроек (папка /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, в котором подключаются необходимые конфигурации и сливаются в одну:
<?php require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../config/bootstrap.php'; // сливаем многомерные массивы $config = \yii\helpers\ArrayHelper::merge( require __DIR__ . '/../config/defaults.php', // многомерный массив настроек по умолчанию require __DIR__ . '/../config/web.php' // многомерный массив настроек веб окружения ); (new yii\web\Application($config))->run();
Файл /config/bootstrap.php отвечает за «предпусковые» настройки боевого сервера:
<?php // настройки локальной машины $path_local = __DIR__ . '/bootstrap.local.php'; if(file_exists($path_local)) { require $path_local; }
Как видно из участка кода, полезной информации в файле обычно нет, но в нем присутствует код отвечающий за проверку и подключение локальных файлов. Такой подход позволяет не беспокоится о наличии этих файлов.
Файл /config/bootstrap.php отвечает за «предпусковые» настройки для локального сервера:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev');
Файл /config/defaults.php отвечает за настройки боевого сервера по умолчанию и обычно содержит настройки подключения к базе данных и другие глобальные настройки приложения (из файла были убраны некоторые настройки для наглядности):
<?php $defaults = [ 'basePath' => 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 отвечает за настройки локального сервера по умолчанию и переопределяет настройки подключения к базе данных:
<?php return [ 'components' => [ '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 репозитария это еще больше упрощает жизнь: не нужно беспокоиться о том, что какие-то локальные настройки улетят на сервер.
ссылка на оригинал статьи http://habrahabr.ru/post/264969/
Добавить комментарий