| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | <?phpnamespace 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;    }}
 |