DbHelp.ru
Маленький Yii блог
Комментарии
And with all of this amazing software for image reuopdrction more than half the shots I see posted o: And with all of this amazing software for image reuopdrction more than half the shots I see posted o...
Андрей: Добрый день, подскажите, а как этого зверя парсить?
With havin so much written content do you ever run into any problems of plagorism or copyright infri: With havin so much written content do you ever run into any problems of plagorism or copyright infri...
Гость: Спасибо)))
Анна: Спасибо большое! Очень хорошая статья. Все понятно даж...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Используем много конфигураций в одном приложении

Рубрика: Перевод Cookbook

Оцените эту статью:

Рейтинг: 0.00 (0)
14 мая 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.rucookbook Сегодняшняя статья является переводом "Manage application configuration in different modes" из Cookbook. При создании нашего приложения единственным параметром который мы можем передать в Yii::createWebApplication - является ссылка на файл конфигурации, согласно которому оно и будет работать. С другой стороны было бы отлично если приложение могло бы использовать разные конфигурационные файлы для некоторых случаев. Например, может потребоваться применять различные конфигурационные файлы при работе в обычном режиме, в режиме разработки и режиме тестирования; В крупных командах разработчики часто работают со своим собственным слепком базы данных, параметрами и конфигурацией. В этом руководстве вы получите практические знания по всем выше перечисленным ситуациям и научитесь использовать разные конфигурационные файлы для своих нужд.

---

Прежде чем начать, мы должны отметить что конфигурация приложения в Yii хранится в виде PHP файла (protected/config/main.php). В результате мы можем разместить в нем любой рабочий PHP скрипт что сделает нашу конфигурацию более "умной", чем простое возвращение массива из параметров и значений.

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

Во-вторых, создаем файл dev.php который будет содержать в себе конфигурацию разработчиков. К примеру в этой конфигурации мы можем использовать другую базу данных, выводить дебагер на экран и многое другое. Поскольку основные параметры приложения у нас находятся в main.php файле, то dev.php должен просто наследовать файл main.php и переопределять необходимые параметры конфигурации. Для того чтобы осуществить наследование мы используем CMap:: mergeArray. Файл dev.php будет выглядеть следующим образом:

<?php
return CMap::mergeArray(
    require(dirname(__FILE__).'/main.php'),
    array(
        'components'=>array(
            'db'=>array(
                // define DB connection used for development
            ),
        ),
    )
);


В начале мы подключили файл main.php который содержит в себе конфигурацию по умолчанию, после этого в виде массива указали конфигурацию для dev.php. (в примере выше показано как использовать индивидуальную конфигурацию DB отличную от main.php). В конечном итоге происходит возврат результата слияния этих двух массивов. Имейте ввиду что мы не должны использовать array_merge() или array_merge_recursive() функции.

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

Для того чтобы запустить приложения в разных режимах (обычный режим, режим разработчика, режим тестирования) мы должны с вами в файле index.php в метод Yii::createWebApplication передать название соответствующего файла конфигурации. Что бы спасти вас от постоянного изменения файла index.php что бы запускать приложение под новой конфигурацией - мы можем создать отдельный загрузочный файл для каждого из сценариев. Например, мы можем создать index.php, index_dev.php, index_test.php которые будут полностью идентичны кроме значения в Yii::createWebApplication (для index_dev.php вы укажите "dev.php", для index.php - "main.php" и т.д).

Теперь что бы загрузить наше приложение в обычном режиме в браузере мы используем index.php (localhost/index.php), для загрузки конфигурации разработчиков в браузере мы используем index_dev.php (localhost/index_dev.php) соответственно.

Подсказка: Используя описанную выше технику вы также можете использовать разные параметры (указанные через Yii::app()->params) для различных режимов загрузки.

Ссылка на "Manage application configuration in different modes"  (Англ.)



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Александр Макаров на страницах yiiframework.ru опубликовал перевод очень хорошего рецепта. Хочу заметит что материал будет очень полезен для тех, кто ... "Краткий справочник по валидации форм"

  2. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 6 : Регистрация и авторизация. Часть 1"

  3. Вот в отпуске побывал впервые в жизни... а некоторые так за всю жизнь ни разу там и не бывают как ... "Не будите программиста!"

[guest] Гость

Было сказано: Четверг, 14 Май 2009

Спасибо!

[guest] xoma

Было сказано: Четверг, 14 Май 2009

На заметку! Спасибо!

[guest] Павел Фролов

Было сказано: Вторник, 12 Январь 2010

Спасибо! Хорошая заметка, от себя добавлю:
index.php:


// берем переменную окружения
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
...
// конфиг по имени нашей переменной окружения
$config=dirname(__FILE__).'/protected/config/' . APPLICATION_ENV . '.php';


далее в .htaccess прописываем эту переменную окружения, для девелопа
SetEnv APPLICATION_ENV development
...
для продакешна
SetEnv APPLICATION_ENV production
...

ну и по Вашему методу когфиги: development.php и production.php (и тд)

соответственно для каждого проекта определяем режим чтобы через .htaccess ( заливаем его и не трогаем более :) )

[guest] Гость

Было сказано: Вторник, 12 Январь 2010

оригинально! Я пользуюсь переменной $_SEVER и по условию выюираю конфиг.

[guest] Гость

Было сказано: Вторник, 12 Январь 2010

Извиняюсь, опечатка $_SERVER

[guest] Павел Фролов

Было сказано: Среда, 13 Январь 2010

Эту фишку я я просек когда на ZF работал.
От условий лучше всегда избавляться - это негибкий стиль.
Хорошая книга мартина фаулера "рефакторинг". Советую почитать. Я лично очень много от туда почерпнул.

SpiLLeR

Было сказано: Среда, 13 Январь 2010

У Вас используется такое же условие, в чем разница?
Вы проверяете константу APPLICATION_ENV и потом по условию подставляете конфиг. Я к примеру делаю:
if($_SERVER['SERVER_ADDR'] === '127.0.0.1') {
// можно определить другие локальный параметры
$config = dirname(dirname(__FILE__)) . '/application/config/main_loc.php';
} else {
$config = dirname(dirname(__FILE__)) . '/application/config/main.php';
}

[adm] zolter

Было сказано: Среда, 13 Январь 2010

"Рефакторинг" на днях почитаю, спасибо.
По отзывам говорят что хорошая книга

[guest] Semasping

Было сказано: Среда, 13 Январь 2010

Добрый день! вот уже 4 дня как узнал про Yii.
Много читаю, но кодить еще не начал...
раньше работал с CI
Возник следующий вопрос насчет конфига:
Мне кажется в Ci удобнее хранится конфиг, вроде тоже в массиве но редактировать его удобнее, можно ли тут сделать так же т.е. не
array(''=>'',...)
а $config['']='',
было бы нагляднее...

Может уже есть такое расширение (глянул, не нашел)

А за блог с уроками огромное Спасибо, описано все отлично!!!

[adm] zolter

Было сказано: Среда, 13 Январь 2010

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

<?php

$config = array();

$config['basePath'] = dirname(__FILE__).DIRECTORY_SEPARATOR.'..';
$config['name'] = 'DbHelp.ru';
$config['defaultController'] = 'post';
$config['preload'] = array('log');

$config['import'][] = 'application.models.*';
$config['import'][] = 'application.components.*';

и т.д.

return $config;

semasping

Было сказано: Среда, 13 Январь 2010

и при обновлении версий frameworka
он не затронется т.к обновляется только те папки которые вынесены из webroot/, a само приложение (то что сгенерировано с помощью yiic не участвует в обновлении)

я все верно понимаю ?

[adm] zolter

Было сказано: Среда, 13 Январь 2010

Ага, при обновлении только папку framework меняете. А папку protected, в которой всё ваше приложение - не трогаете.

[guest] Гость

Было сказано: Среда, 13 Январь 2010

Скоро Вы опубликуете стою вторую статью про написание биллинг системы? А то вчера уже обещали... А никак не опубликуете

[adm] zolter

Было сказано: Среда, 13 Январь 2010

Вот сижу графики подгоняю для статьи. Постараюсь успеть сегодня

[guest] Гость

Было сказано: Среда, 13 Январь 2010

Ок. Примерно во сколько по Москве?

[guest] zolter

Было сказано: Среда, 13 Январь 2010

Да завтра с утра войдете и почитаете. Я ненаю :)

[guest] Павел Фролов

Было сказано: Воскресенье, 24 Январь 2010

> SpiLLeR
> Было сказано: Среда, 13 Январь 2010
> У Вас используется такое же условие, в чем разница?
> Вы проверяете константу APPLICATION_ENV и потом по условию подставляете конфиг.

Условия у меня нету.
Разница в том, что Вы жестко прописываете названия конфигов в коде. У меня же такого ограничения нет. Для того что бы в моем коде добавить новый вид конфига - достаточно положить на сервер .htaccess с соответствующим именем (+ файл конфига создать).
У вас же придется править код, что не есть хорошо, особенно для работы в команде.

Оставить комментарий


Код:
Имя: