Вместо предисловия
Занялся я с недавних пор Yii «по производственной необходимости». До этого сидел на ZF. Некоторые вещи в Yii кажутся неудобными или негибкими. В частности отсутствие раздельное конфигурации и работа с frontend/backend. Правда AR порадовал )). Но о чем это я?!
Ближе к делу
Начнем с самого начала, с удобной и гибкой конфигурации. Разумеется что перед решением по разделению конфигурации для паблик сервера и разработчика я полазил по форумам, посмотрел что пишут на хабре… Но все решения сводятся к определению имени хоста и решения на его основе о нужной конфигурации. Но увольте, есть же тестеры, есть команды разработчиков, есть много еще чего. В общем предлагаемый подход мне не нравится. Предлагаю свое решение по примеру ZF. Все очень просто. Я использую apache, поэтому решение для него. Весть секрет заключается в определении серверной переменной APPLICATION_ENV, а все остальное как везде.
Файл index.php
// тут вся магия. Мы смотрим серверную переменую и заносим ее в константу. Потом можем использовать ее везде.
// По умолчанию production
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Подключаем Yii
$yii=dirname(__FILE__).'/../framework/yii.php';
/**
* Включим дебаг если мы разработчики
*/
if (APPLICATION_ENV == 'devel')
{
defined('YII_DEBUG') or define('YII_DEBUG',true);
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
}
// А вот так мы подключим нужную нам конфигурацию
$config = dirname(__FILE__).'/protected/config/'.APPLICATION_ENV.'.php';
require_once($yii);
Yii::createWebApplication($config)->run();
файл конфигурации нашего сайта в apache2
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName myplace.dev
DocumentRoot /home/project/dev/myplace/public
# А тут мы указываем тип конфигурации который нам нужен.
SetEnv APPLICATION_ENV "devel"
<Directory /home/project/dev/myplace/public/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Для большей удобности можно воспользоватся слиянием конфигураций по примеру
Файл production.php и devel.php в папке с конфигурацией
<?php
return CMap::mergeArray(
// наследуемся от main.php
require(dirname(__FILE__).'/main.php'),
array(
'components'=>array(
// переопределяем компонент db
'db' => array (
// настройка соединения с базой
),
),
)
);
Подобный подход даст нужную гибкость конфигурации и позволит командам разработчиков удобно работать с одним и тем же проектом.
Успехов.
Автор: suver