Я работаю в многопользовательском программном обеспечении (SaaS), построенном с помощью yii2 на расширенном шаблоне, но у меня нет желаемого результата по подключению базы данных арендаторов.Multi-tenant SaaS, построенный в Yii2
Я пытаюсь установить соединение с базой данных, как следующий в моем файле конфигурации для интерфейса:
$defaultAdminDB = [
'class' => 'yii\db\Connection',
'dsn' => 'pgsql:host=localhost;dbname=untitled',
'username' => 'postgres',
'password' => 'myPass',
'charset' => 'utf8',
];
$config = [
'components' => [
'db' => function(){
if (Yii::$app->session->get('login', false)){
return [
'class' => 'yii\db\Connection',
'dsn' => Yii::$app->session->get('client_connection.dns'),
'username' => Yii::$app->session->get('client_connection.username'),
'password' => Yii::$app->session->get('client_connection.password'),
'charset' => 'utf8',
];
}
return [
'class' => 'yii\db\Connection',
'dsn' => 'pgsql:host=localhost;dbname=untitled',
'username' => 'postgres',
'password' => 'myPass',
'charset' => 'utf8',
];
},
'dbAdmin' => $defaultAdminDB
]
];
Тогда у меня есть два шага войти, где первый просит для входа в систему (арендатора ид) и в следующем - пользователь и пароль. На первом контроллере я следующий с:
$account = \frontend\models\AdminAccounts::findOne(['login'=>$this->login]);
if (!$account){
$this->addError('login', Yii::t('app', 'Account data not found.'));
return false;
}
$dns = sprintf('pgsql:host=%s;dbname=%s', $account->getAttribute('db_host'), $account->getAttribute('db'));
Yii::$app->session->set('login', $this->login);
Yii::$app->session->set('client_connection.dns', $dns);
Yii::$app->session->set('client_connection.username', $account->getAttribute('db_user'));
Yii::$app->session->set('client_connection.password', $account->getAttribute('db_pass'));
я успешно данные учетной записи (арендатор) и хранить его в сессии, но я думаю, что моя ошибка на инстанцирования yii\db\Connection
по getDb()
методы модели.
Надежда может мне помочь. С уважением!
Вы можете объяснить, что вы сделали и почему оно отвечает на вопрос – depperm