DbHelp.ru
Маленький Yii блог
Комментарии
Mj: Мдааа так было интересно, ех... Но лучше поздно чем нико...
Mj: Добавте оповещание по email
Mj: Здравствуйте! Есть вопрос. У меня в постраничне навига...
Гость: Ну хоть что то по Yii framework (просто хотелось бы video course, ур...
Denis: По поводу вышеописанной проблемы мой код можно посмот...



Сервер 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. Многие интересуются вопросами по интеграции всевозможных визуальных редакторов на свой сайт. Сегодня мы поговорим о том, как интегрировать CKEditor ... "Подключаем CKEditor"

  2. Флеш-сообщения используются для того, что бы сохранить в сессии некий текст, и после отображения его пользователю - сразу удалить. Понятие ... "Как работать с флеш-сообщениями"

  3. Давайте сегодня немного поработаем со всевозможными настройками которые нам предоставляет стандартный класс для работы с капчей (CCaptcha). next Давайте для начала ... "Изменяем нашу каптчу (captcha)"

[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 с соответствующим именем (+ файл конфига создать).
У вас же придется править код, что не есть хорошо, особенно для работы в команде.

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


Код:
Имя: