Как использовать несколько файлов конфигурации с помощью Yii

#php #yii

#php #yii

Вопрос:

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

Поэтому, когда я запускаю на своем сервере, я просто меняю index.php файл.

Разработка:

 // developement
$config=dirname(__FILE__).'/protected/config/development.php';
// production
// $config=dirname(__FILE__).'/protected/config/production.php';
  

Производство:

 // developement
// $config=dirname(__FILE__).'/protected/config/development.php';
// production
$config=dirname(__FILE__).'/protected/config/production.php';
  

Ответ №1:

Возможно, эта статья даст вам некоторую информацию.

Yii Framework Отдельные конфигурации для разных сред

Ответ №2:

Мое решение также основано на отдельных конфигурациях Yii Framework для разных сред. Преимущество этого метода в том, что общие конфигурации хранятся в config/main.php и только различия сохраняются в config/main_prod.php и config/main_dev.php спасибо CMap::mergeArray.

config/main.php пример:

 <?php

$config = array( ... );

switch ($_SERVER['SERVER_NAME']) {
    case 'your-prod-server-name.com':
        $config = CMap::mergeArray(
            $config,
            require(dirname(__FILE__) . '/main_prod.php')
        );
        break;
    default:
        $config = CMap::mergeArray(
            $config,
            require(dirname(__FILE__) . '/main_dev.php')
        );
        break;
}

return $config;
  

Конечно, вместо $_SERVER['SERVER_NAME'] того, чтобы вы можете использовать YII_DEBUG :

 <?php

$config = array( ... );

if (YII_DEBUG) {
    $config = CMap::mergeArray(
        $config,
        require(dirname(__FILE__) . '/main_dev.php')
    );
} else {
    $config = CMap::mergeArray(
        $config,
        require(dirname(__FILE__) . '/main_prod.php')
    );
}

return $config;
  

Ответ №3:

Попробуйте это:

 if ($_SERVER['HTTP_HOST'] == 'yourdomain.com') {
    $config = dirname(__FILE__).'/protected/config/production.php';
} else {
    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
    $config = dirname(__FILE__).'/protected/config/development.php';
}
  

Ответ №4:

если только изменить подключение к базе данных
'db'=>require($_SERVER['REMOTE_ADDR']=='127.0.0.1' ? 'db_dev.php' : 'db.php'),

и создавать файлы в каталоге конфигурации с содержимым
<?php return array(
'connectionString' => 'mysql:host=localhost;dbname=yii',
'emulatePrepare' => true,
'schemaCachingDuration' => 3600,
'enableProfiling'=>true,
'enableParamLogging' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
); ?>