我有一個適用於特定數據庫結構的Yii應用程序。我的公司有幾乎每一個emplyee這樣的數據庫。所以,我希望用戶能夠在啓動應用程序時連接到他們自己的數據庫。這意味着,在一個表單中,他們將輸入用戶名,密碼,主機名和他們自己的數據庫的名稱。我檢查連接,如果失敗,它會向用戶顯示錯誤消息,如果它有效,應用程序的其餘部分開始,emplyee可以訪問他的個人數據。如何讓用戶連接到Yii2中的數據庫?
我沒有所有這些數據庫及其憑據的列表。它只有誰知道他們的emplyee。
我用這個作爲參考Yii2 Create Database Connection。這是一個經常遇到的問題,但所有的答案都是關於CActiveRecord和Yii2中不再提供的東西。
我在web.php
文件中評論了db
組件,並將其添加到控制器中。問題是,模型在自舉階段連接到一個不存在的db
,在重定向到index
時產生錯誤。
如何讓模型知道Yii::$app
配置中更改的連接?
這是我在控制器動作:
public function actionConnect() {
$model = new DBcomponents();
if (Yii::$app->request->isAjax && $model->load($_POST))
{
Yii::$app->response->format = 'json';
return \yii\widgets\ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post()))
{
// Create Test DB Connection
$form = $model;
$dsn ='mysql:host='.$form->newhost.';dbname='.$form->dbname;
$config = Yii::$app->getComponents();
$db = new \yii\db\Connection([
'dsn' => $dsn,
'username' => $form->username,
'password' => $form->password,
'charset' => 'utf8'
]);
$db->open();
try {
// Check DB Connection
if ($db->getIsActive()) {
// Write Config
$db->close();
$config['components']['db'] = $db;
Yii::$app->setComponents($config['components']);
Yii::$app->db->open();
$success = TRUE;
return $this->redirect(['index']);
}else{
$errorMsg = 'Incorrect Configurations';
}
} catch (Exception $e) {
$errorMsg = $e->getMessage();
}
}
else{
return $this->render('dbcreate', [
'model' => $model,
]);}
}
我找到了解決問題的方法。我很快會解釋它的答案。 – mada