Используем несколько конфигураций в одном приложении
В некоторых случаях полезно использовать разные конфигурационные файлы. Например, может потребоваться применять различные конфигурации при работе в обычном режиме, в режиме разработки и режиме тестирования. В крупных командах разработчики часто работают со своим собственным слепком базы данных, параметрами и конфигурацией.
Автоматический выбор конфигурации
При создании приложения единственным параметром, который мы можем
передать в Yii::createWebApplication, является путь к файлу конфигурации,
согласно которому оно будет работать. Этим можно воспользоваться:
index.php:
$webRoot=dirname(__FILE__); // Если хост равен localhost, то включаем режим отладки и подключаем отладочную // конфигурацию if($_SERVER['HTTP_HOST']=='localhost'){ define('YII_DEBUG', true); require_once(dirname($webRoot).'/framework/yii.php'); $configFile=$webRoot.'/../app/config/dev.php'; } // Иначе выключаем режим отладки и подключаем рабочую конфигурацию else { define('YII_DEBUG', false); require_once(dirname($webRoot).'/framework/yiilite.php'); $configFile=$webRoot.'/../app/config/production.php'; } $app = Yii::createWebApplication($configFile)->run();
Подобным образом можно подключать файлы конфигурации в зависмости, например, от IP-адреса или наличия определённого cookie.
Наследование конфигурации
Почти полностью дублировать конфигурацию в файле разработчика и рабочем файле
неудобно. К счастью, конфигурация приложения в Yii хранится
в виде PHP файла (protected/config/main.php). В результате, мы можем разместить
в нём код, который позволит нам наследовать конфигурацию.
Итак, нам необходимо завести три файла:
1. main.php с конфигурацией приложения по умолчанию.
2. dev.php, который будет содержать конфигурацию для
разработчика. К примеру, в этой конфигурации мы можем использовать другую
базу данных, выводить отладочную информацию на экран и многое другое.
3. production.php, содержащий настройки, специфичные для работы на сервере.
Покажем наследование на примере dev.php. Для этого используем CMap::mergeArray.
dev.php:
return CMap::mergeArray( // наследуемся от main.php require(dirname(__FILE__).'/main.php'), array( 'components'=>array( // переопределяем компонент db 'db'=>array( // настройки для конфигурации разработчика ), ), ) );
Аналогичным образом поступим с production.php.
Основан на: http://www.yiiframework.com/doc/cookbook/32/ в переводе Ozzy, dbhelp.ru.Переработан: Александром Макаровым, Sam Dark (rmcreative.ru)
