| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- <?php
 
- namespace install\models;
 
- use yii\base\Model;
 
- use Yii;
 
- use yii\db\Connection;
 
- use yii\db\Exception;
 
- use common\helpers\Dsn;
 
- class DatabaseForm extends Model
 
- {
 
-     
 
-     public $username;
 
-     public $password;
 
-     public $database = 'yii2cmf';
 
-     public $hostname = "127.0.0.1";
 
-     public $port = "3306";
 
-     
 
-     public $prefix = "yii2cmf_";
 
-     public function rules()
 
-     {
 
-         return [
 
-             [['hostname', 'username', 'database', "hostname", "port"], 'required'],
 
-             [['hostname'], 'checkDb'],
 
-             [['password', "prefix"], 'safe']
 
-         ];
 
-     }
 
-     
 
-     
 
-     public function checkDb($attribute, $params)
 
-     {
 
-         $dsn = "mysql:host=" . $this->hostname . ";dbname=" . $this->database.";port=".$this->port;
 
-         // Create Test DB Connection
 
-         Yii::$app->set('newDb', [
 
-             'class' => Connection::className(),
 
-             'dsn' => $dsn,
 
-             'username' => $this->username,
 
-             'password' => $this->password,
 
-             'charset' => 'utf8'
 
-         ]);
 
-         try {
 
-          
 
-             Yii::$app->get("newDb")->open();
 
-             
 
-         } catch (Exception $e) {
 
-             switch ($e->getCode()) {
 
-                 case 1049:
 
-                     $this->addError("database", $e->getMessage());
 
-                     break;
 
-                 case 1045:
 
-                     $this->addError("password", $e->getMessage());
 
-                     break;
 
-                 case 2002:
 
-                     $this->addError("hostname", $e->getMessage());
 
-                     break;
 
-                 default:
 
-                     $this->addError("hostname", $e->getMessage());
 
-                     break;
 
-             }
 
-         }
 
-     }
 
-     public function loadDefaultValues()
 
-     {
 
-         $definitions = \Yii::$app->getComponents();
 
-         
 
-         if(isset($definitions["db"])&&isset($definitions["db"]['dsn']))
 
-         {
 
-             $dsn = Dsn::parse($definitions["db"]['dsn']);
 
-             $this->hostname = $dsn->host;
 
-             $this->database = $dsn->database;
 
-             $this->port = $dsn->port;
 
-             $this->username = $definitions["db"]['username'];
 
-             $this->password = $definitions["db"]['password'];
 
-             $this->prefix =  $definitions["db"]['tablePrefix'];
 
-         }
 
-     }
 
-     
 
-     public function attributeLabels()
 
-     {
 
-         return [
 
-             'hostname' => '数据库地址',
 
-             'username' => '数据库用户名',
 
-             'password' => '数据库密码',
 
-             'database' => '数据库名称',
 
-             "port" => "端口",
 
-             "prefix" => "前缀"
 
-         ];
 
-     }
 
-     public function save()
 
-     {
 
-         Yii::$app->setEnv('DB_USERNAME', $this->username);
 
-         Yii::$app->setEnv('DB_PASSWORD', $this->password);
 
-         Yii::$app->setEnv('DB_TABLE_PREFIX', $this->prefix);
 
-         Yii::$app->setEnv('DB_DSN', "mysql:host=$this->hostname;dbname=$this->database;port=$this->port");
 
-         Yii::$app->set('db', Yii::createObject([
 
-             'class' => 'yii\db\Connection',
 
-             'dsn' => "mysql:host=$this->hostname;dbname=$this->database;port=$this->port",
 
-             'username' => $this->username,
 
-             'password' => $this->password,
 
-             'charset' => 'utf8',
 
-             "tablePrefix" => $this->prefix
 
-         ])
 
-         );
 
-         return true;
 
-     }
 
- }
 
 
  |