Вместо предисловия
Занялся я с недавних пор Yii «по производственной необходимости». До этого сидел на ZF. Некоторые вещи в Yii кажутся неудобными или негибкими. В частности отсутствие раздельное конфигурации и работа с frontend/backend. Правда AR порадовал )). Но о чем это я?!
Ближе к делу
Начнем с самого начала, с удобной и гибкой конфигурации. Разумеется что перед решением по разделению конфигурации для паблик сервера и разработчика я полазил по форумам, посмотрел что пишут на хабре… Но все решения сводятся к определению имени хоста и решения на его основе о нужной конфигурации. Но увольте, есть же тестеры, есть команды разработчиков, есть много еще чего. В общем предлагаемый подход мне не нравится. Предлагаю свое решение по примеру ZF. Все очень просто. Я использую apache, поэтому решение для него. Весть секрет заключается в определении серверной переменной APPLICATION_ENV, а все остальное как везде.
Файл index.php
файл конфигурации нашего сайта в apache2
Для большей удобности можно воспользоватся слиянием конфигураций по примеру
Файл production.php и devel.php в папке с конфигурацией
Подобный подход даст нужную гибкость конфигурации и позволит командам разработчиков удобно работать с одним и тем же проектом.
Успехов.
Занялся я с недавних пор 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 ( // настройка соединения с базой ), ), ) );
Подобный подход даст нужную гибкость конфигурации и позволит командам разработчиков удобно работать с одним и тем же проектом.
Успехов.