О, это с удовольствием. Там просто мерж массивов.
//config/local.php
<?php
$parent=require(dirname(__FILE__).'/main.php');
return CMap::mergeArray(
$parent,
array(
'components'=>array(
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=qwe_main',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'enableProfiling'=>true,
'enableParamLogging' => false,
),
),
'params'=>array(
"favicon"=>"favicon-loc.ico",
"enviroment"=>ENV_LOCAL,
),
)
);
Только в index.php нужно выбирать какой файл подключать. Это можно сделать на основании доменного имени, но при запуске консольных задания, такой автовыбор работать не будет. Поэтому я в прошлом проекте предпочитал читать файлик host.php из каталога выше, чем лежало приложение, а в этом файле определял "имя окружения". Это громоздко, но т.к. активно использовалась консоль, себя оправдывало.
Кстати host.php лежал уровнем выше, что бы он ни коим образом не попадал в систему контроля версий.
//host.php
<? return 'local';
<?php
//index.php
//....
$path=array("../", "../www/", "/var/www/"); //пути в которых может лежать host.php
$fname="host.php";
while (list($key, $val) = @each($path)) {
if (file_exists($val.$fname)) {$host=include($val.$fname); break; }
}
switch ($host) {
case ENV_LOCAL: //а эти константы я задал где-то. что бы избежать магических строк
error_reporting(E_ALL); ini_set("display_errors", 1);
define('YII_DEBUG', true);
$config=dirname(__FILE__).'/protected/config/local.php';
break;
case ENV_DEV:
error_reporting(E_ALL); ini_set("display_errors", 1);
define('YII_DEBUG', true);
$config=dirname(__FILE__).'/protected/config/dev.php';
break;
case ENV_LIVE:
default:
error_reporting(E_ALL ^E_NOTICE); ini_set("display_errors", 1);
define('YII_DEBUG', false);
$config=dirname(__FILE__).'/protected/config/live.php';
break;
}
require_once($yii);
Yii::createWebApplication($config)->run();