Как запретить Yii автоматически открывать базу данных - PullRequest
0 голосов
/ 20 сентября 2018

Я использую Yii 1.1.17 для своего портала.Я использую одно и то же приложение для подключения к различным базам данных в зависимости от имени домена.Я пишу фальшивые параметры в main.php

'db'=>array(
   'connectionString' => 'mysql:host=localhost;dbname=db',           
   'emulatePrepare' => TRUE,
   'active' => FALSE,
   'username' => 'dbUser',
   'password' => 'dbP@ssW0rd',
   'charset' => 'utf8'
),

Затем меняю их в Controller.php так:

// get database params from url
        $url = Yii::app()->request->serverName;
        $db_param = explode(".",$url);
        $db = Yii::app()->params['db'][$db_param[0]];
        Yii::app()->db->setActive(false);
        Yii::app()->db->connectionString = mysql:host=127.0.0.1;dbname=$db";
        Yii::app()->db->username = $db;
        Yii::app()->db->setActive(true);

username совпадает с dbname, а password одинаково для всех баз данных.Когда я открываю портал, он дает мне

 CDbException
 CDbConnection failed to open the DB connection.

Но когда я записываю реальные значения действующей базы данных в connectionString и username внутри main.php, она открывается, затем изменяет этозначения и подключается в правильную базу данных.

Мой вопрос: Как запретить Yii автоматически подключаться перед запуском кода в Controller.php.Я установил 'active' => FALSE, но это не помогает.

1 Ответ

0 голосов
/ 21 сентября 2018

Yii не будет инициализировать компонент db и не будет открывать соединение с БД, пока вы его не используете.Итак, если ваше соединение открыто, возможно, вы на самом деле используете этот компонент где-то до запуска контроллера (другие компоненты могут его использовать)?

Но, скорее всего, вы сами инициализируете его в своем контроллере - обращаетесь к Yii::app()->db инициализирует db компонент и откроет соединение с БД.Вы должны использовать setComponent() для его переопределения:

Yii::app()->setComponent('db', [
    'class' => 'CDbConnection',
    'connectionString' => 'mysql:host=localhost;dbname=db',
    'emulatePrepare' => true,
    'active' => false,
    'username' => 'dbUser',
    'password' => 'dbP@ssW0rd',
    'charset' => 'utf8',
]);

или

Yii::app()->setComponent('db', Yii::createComponent([
    'class' => 'CDbConnection',
    'connectionString' => 'mysql:host=localhost;dbname=db',
    'emulatePrepare' => true,
    'active' => false,
    'username' => 'dbUser',
    'password' => 'dbP@ssW0rd',
    'charset' => 'utf8',
]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...