четверг, 26 мая 2011 г.

Настройка файла main.php в Yii. Основная конфигурация.

Когда я захотел выложить свой первый сайт на Yii на хост провайдера, задумался о возможности сделать разную конфигурацию для разных доменов. О такой возможности я прочитал в документации. Чтобы для домена catalog.loc (то есть локального) показывались логи на экран, а для домена в интернете – нет, и, конечно же чтобы использовались разные базы данных.

Сначала в файле Z:\home\catalog.loc\www\index.php
сделал условие: если $_SERVER['HTTP_HOST']=='catalog.loc' то есть сайт открывается на локальном хосте, то
Показывать логии, и подключать конфигурацию 'local_main.php', а если не на локальном, то логии не показывать, и подключать 'psyhos_main.php'
Файле Z:\home\catalog.loc\www\index.php стал выглядеть так:
if($_SERVER['HTTP_HOST']=='catalog.loc'){
define('YII_DEBUG', true);
$yii=dirname(__FILE__).'/protected/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/local_main.php';
}
else {
define('YII_DEBUG', false);
$yii=dirname(__FILE__).'/protected/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/psyhos_main.php';
define('YII_ENABLE_ERROR_HANDLER', false);
define('YII_ENABLE_EXCEPTION_HANDLER', false);
}
require_once($yii);
$app = Yii::createWebApplication($config)->run();

В папке Z:\home\catalog.loc\www\protected\config\ создал пустые, пока, файлы, которые указал в Z:\home\catalog.loc\www\index.php.
Я попробовал использовать наследование конфигурации фреймворка:
В файле Z:\home\catalog.loc\www\protected\config\main.php я оставил только общие для обеих конфигураций настройки:
'assortiment',
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'Каталог. Мой первый сайт на Yii',
// preloading 'log' component
'preload'=>array('log'),
// autoloading model and component classes
'import'=>array(
'application.models.*',
 'application.models.*',
'application.components.*',
'application.widgets.*',
'application.modules.*',
),         
// application components
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
),
// uncomment the following to enable URLs in path-format
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),

),
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@catalog.ee',
),
);

В файле Z:\home\catalog.loc\www\protected\config\local_main.php я вызываю :\home\catalog.loc\www\protected\config\main.php и переназначаю некоторые параметры:
array(
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=catalog',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'enableParamLogging'=>true,
'enableProfiling'=>true,

),
                                                  
'modules'=>array(
// uncomment the following to enable the Gii tool
                           
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'123',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
                           
),
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array('class'=>'CWebLogRoute',
'levels'=>'error, warning',
),
// uncomment the following to show log messages on web pages
                                      
array(
'class'=>'CWebLogRoute',
),
                                      
),
),

))
);

Так же и в файле Z:\home\catalog.loc\www\protected\config\psyhos_main.php
array(
'db'=>array(
'connectionString' => 'mysql:host=db.vnet.ee;dbname=Имя базы данных',
'emulatePrepare' => true,
'username' => 'Имя пользователя',
'password' => 'Пароль',
'charset' => 'utf8',
'enableParamLogging'=>true,
'enableProfiling'=>true,
),
))
);
Теперь сайт работает и на локальном и на удаленном хосте одновременно с разными настройками. Это облегчит немного его дальнейшую разработку. Хочется добавить редактор WYSIWYG к форме ассортимента.
Продолжение следует.

5 комментариев:

  1. Интересное решение.
    >>сделать разную конфигурацию для разных доменов.
    >>О такой возможности я прочитал в документации.
    Не подскажите где именно в документации это написано, я никак не могу найти.

    Возможно глупый вопрос, но до меня все еще никак не дойдет, как обращаясь к локальному адресу можно получить доступ к настройкам Yii на хосте?

    ОтветитьУдалить
  2. Вы разрабатываете сайт, например в Denwer, на своем домашнем компьютере (локально). Если вы свой проект просто перенесете на хост провайдера, то он не заработает там, пока вы не внесете изменения в название базы данных, потом еще надо отключить вывод логов на экран, может быть, настроить кэширование структуры базы и тому подобное. После этих изменений локально сайт уже не будет работать.

    Когда используется вышеприведенный метод, проект работает с нужными настройками на любом хосте. Проект сам определяет, где он находится (через переменную $_SERVER['HTTP_HOST), и подключает нужную конфигурацию автоматически.

    ОтветитьУдалить
  3. Об этом прочитал в http://yiiframework.ru/doc/cookbook/ru/install.many.configs

    ОтветитьУдалить
  4. Спасибо за ответ.
    И за ссылку, а то я все Полное руководство пересмотрел а в Рецепты то и не заглянул.

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить