Как стать автором
Обновить

Разделение конфигураций в Yii по взрослому

Время на прочтение 2 мин
Количество просмотров 13K
Вместо предисловия
Занялся я с недавних пор 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 ( 
				// настройка соединения с базой
			),
		),
	)
);


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

Успехов.
Теги:
Хабы:
+4
Комментарии 23
Комментарии Комментарии 23

Публикации

Истории

Работа

PHP программист
175 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн