Настройка файла main.php в приложении на Yii: конфигурации для локальной разработки и для сервера. Наследование конфигураций.

Настройка файла main.php в приложении на Yii: конфигурации для локальной разработки и для сервера. Наследование конфигураций. Очень удобно при создании приложений на Yii использовать разные конфигурационные файлы. Например, можно применять одну конфигурацию при работе в обычном режиме (рабочий сайт на сервере) и другую для разработки на локальном компьютере. С другой базой данных и иными параметрами, нежели рабочий сайт.

Добавляем условие в index.php  о том что сайт открывается на локальном хосте или нет:

<?php

if($_SERVER['HTTP_HOST']=='loco:8888'){
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1"){
defined('YII_DEBUG') or define('YII_DEBUG',true);
$yii=dirname(__FILE__).'/../YiiRoot/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/local_main.php';
}

else {
define('YII_DEBUG', false);
$yii=dirname(__FILE__).'/../YiiRoot/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/server_main.php';
define('YII_ENABLE_ERROR_HANDLER', false);
define('YII_ENABLE_EXCEPTION_HANDLER', false);
}

require_once($yii);
$app = Yii::createWebApplication($config)->run();

 

Наследование конфигурации

Можно не делать, если после завершения работ сайт не хотите дорабатывать локально. Но так правильнее.

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

Заводим в папке config три файла: 

1. main.php с конфигурацией приложения по умолчанию. 

2. local_main.php, с конфигурацией для разработки. К примеру, в этой конфигурации мы можем использовать другую базу данных, выводить отладочную информацию на экран и многое другое. Согласно правильному предложению от Larry Ullman включим модуль Gii только в локальном режиме, из main.php его вырежем или закомментируем, чтобы он вообще не был подключён на рабочем сайте, а участвовал только на этапе разработки, что очень даже логично и правильно.

Начиная с версии 1.1.2, в состав Yii входит веб-инструмент для генерации кода, называемый Gii. Он заменяет существовавший до этого консольный генератор yiic shell.

3. server_main.php, содержащий настройки под сервер.

Для наследования используем CMap::mergeArray.

Содержимое local_main.php:

<?php
	return CMap::mergeArray(
	    // наследуемся от main.php
	    require(dirname(__FILE__).'/main.php'),
	    array(
	        'modules'=>array(
	 
	'gii'=>array(
	'class'=>'system.gii.GiiModule',
	'password'=>'giiloco',
	// If removed, Gii defaults to localhost only. Edit carefully to taste.
	'ipFilters'=>array('127.0.0.1','95.220.83.225','::1'),
	),
	),
	        
	        'components'=>array(
	            // переопределяем компонент db
	            'db'=>array(
	'connectionString' => 'mysql:host=localhost;dbname=srv12683_loco',
	'emulatePrepare' => true,
	'username' => 'root',
	'password' => 'root',
	'charset' => 'utf8',
	'tablePrefix' => 'tbl_',
	),
	        ),
	    )
	);

server_main.php c пустым массивом, так как мы в main.php уже задали компонент 'db' для базы, находящейся на сервере:

<?php

return CMap::mergeArray(
    // наследуемся от main.php
    require(dirname(__FILE__).'/main.php'),
    array()
);

 

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (2)     Подпишитесь на RSS комментариев к этой статье.

2 комментариев

#1139
NecromS говорит:
April 24, 2014 at 11:41 am
if($_SERVER['HTTP_HOST']=='loco:8888'){
defined('YII_DEBUG') or define('YII_DEBUG',true);
$yii=dirname(__FILE__).'/../YiiRoot/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/local_main.php';
}

Выделенную строчку наверное стоит заменить на на 

if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" )

almix: а в случае работы с MAMP 3 надо проверять $_SERVER['REMOTE_ADDR'] == "::1" 

#1268
Влад говорит:
October 16, 2014 at 06:23 pm

http://www.yiiframework.ru/forum/viewtopic.php?f=9&t=20108 - это решение лучше, если конфиги надо хранить в репозитории

almix: да, в этом есть определённый момент удобства. Как я понял, при установки из командной строки будет предложено ввести значения для нескольких переменных настройки, и расширение их пропишет в конфиг, создав его из пустышки config.dist.php. Спасибо, Влад.