Yii загрузка модели в конфиге

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Yii загрузка модели в конфиге

Сообщение NeverDie »

Здравствуйте! Как возможно загрузить модель в main.php ?
Используется код примерно следующего вида

Код: Выделить всё

$config = array (
...
'db'=>array(
    'connectionString' => 'mysql:host=localhost;dbname=dbname',
    'emulatePrepare' => true,
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
    'tablePrefix' => 'tbl_',
    'enableProfiling'=>true,
),
...
);
...
$data = BSettings::model()->findAll();
...
return $config;
 
При попытке обращения к моделе BSettings выдает ошибку "No such file or directory ".
Пробовал через preload, но ошибка осталась

Код: Выделить всё

'preload'=>array('db', 'import'), 

Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: Yii загрузка модели в конфиге

Сообщение Skiller »

Не, не получится так (можно изголиться но лучше так не делать), т.к. компонент с БД еще не загружен, лучше делайте это где-либо в своем приложении унаследованном от CWebApplication. т.е.

Код: Выделить всё

Yii::createApplication('MyClassWebApp',$config)->run(); //это в index.php
 
а в самом MyClassWebApp

Код: Выделить всё

class MyClassWebApp extends CWebApplication
{
   public function init()
   {
       parent::init();
       $this->makeSomeStuffWithModels();
       $this->doSomethingDifferent();
   }
}
 
p.s. или же используйте ивенты, например onBeginRequest и т п.

Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: Yii загрузка модели в конфиге

Сообщение NeverDie »

Мне как раз и важно, что бы db2 не был загружен, тк база данных в нем выбирается исходя из параметра модели BSettings. Кроме исползования PDO другого выхода не вижу

Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: Yii загрузка модели в конфиге

Сообщение Skiller »

db2? какой-то другой коннекшн? вы можете потом переопределять компоненты через Yii::configure().

Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: Yii загрузка модели в конфиге

Сообщение NeverDie »

Полный код выглядит так. А как конфигурировать через configure()? Можно пример ?

Код: Выделить всё

$config = array(
    'preload'=>array('db', 'import'),

    // autoloading model and component classes
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),

    'modules'=>array(        
    ),

    // application components
    'components'=>array(

        ),
       
        
        // uncomment the following to enable URLs in path-format
        'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'rules'=>array(
                
            ),
        ),

        
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=base1',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => 'tbl_',
            'enableProfiling'=>true,
        ),
        'db2'=>array(
            'class'=>'system.db.CDbConnection',
            'connectionString' => 'mysql:host=localhost;dbname=',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => 'tbl_',
            'enableProfiling'=>true,
        ),
        
        'errorHandler'=>array(
            // use 'site/error' action to display errors
            'errorAction'=>'site/error',
        ),
        'log'=>array(
            ),
        ),
    ),
);

$data = BSettings::model()->find();

$config['components']['db2']['connectionString'] = 'mysql:host=localhost;dbname=blog_'.$data->db_name.'';
return $config;

Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: Yii загрузка модели в конфиге

Сообщение Skiller »

Вообще я бы конечно сделал какой-нибудь pull коннекшенов по-нормальному для всего этого, а если прям "влоб" то вот:

Код: Выделить всё

class MyClassWebApp extends CWebApplication
{
   public function init()
   {
       parent::init();
       BSettings::model()->find();
       $config = array(
           'components'=> array(
             'db2'=>array(
                'connectionString'=>'mysql:host=localhost;dbname=blog_'.$data->db_name.'',
             ),
           ),
       );
       $this->configure->($config);
   }
}
Но лучше уж сделайте какой-либо пулл соединений, с обычным фабричным методом.

Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: Yii загрузка модели в конфиге

Сообщение NeverDie »

Спасибо, большое! Помогло!

Ответить