public function saveDatabaseSettings()
 {
     $details = Request::all();
     $v = Validator::make($details, ['user' => 'required', 'name' => 'required']);
     if (!$v->passes()) {
         FormMessage::set($v->messages());
         return $this->setupDatabase();
     }
     $hostPort = explode(':', $details['host']);
     if (count($hostPort) === 2 && (int) $hostPort[1]) {
         list($details['host'], $port) = $hostPort;
     }
     try {
         $host = ($details['host'] ?: 'localhost') . (isset($port) ? ';port=' . $port : '');
         new \PDO('mysql:dbname=' . $details['name'] . ';host=' . $host, $details['user'], $details['password']);
     } catch (\PDOException $e) {
         switch ($e->getCode()) {
             case 1045:
                 FormMessage::add('user', $e->getMessage());
                 break;
             case 1049:
                 FormMessage::add('name', $e->getMessage());
                 break;
             case 2003:
             case 2005:
                 FormMessage::add('host', $e->getMessage());
                 break;
             default:
                 FormMessage::add('host', $e->getMessage());
         }
         return $this->setupDatabase();
     }
     $updateEnv = ['DB_HOST' => $details['host'], 'DB_DATABASE' => $details['name'], 'DB_PREFIX' => !empty($details['prefix']) ? $details['prefix'] : '', 'DB_USERNAME' => $details['user'], 'DB_PASSWORD' => $details['password']];
     if (isset($port)) {
         $updateEnv['DB_PORT'] = $port;
     }
     try {
         $envFileContents = File::getEnvContents();
         $dotEnv = new Dotenv(base_path(), File::getEnvFile());
         foreach ($dotEnv->load() as $env) {
             $envParts = explode('=', $env);
             if (key_exists($envParts[0], $updateEnv)) {
                 $envFileContents = str_replace($env, $envParts[0] . '=' . $updateEnv[$envParts[0]], $envFileContents);
             }
         }
         file_put_contents(base_path('.env'), $envFileContents);
         Artisan::call('key:generate');
     } catch (\Exception $e) {
         FormMessage::add('host', 'can\'t write settings to the .env file, check it is writable for the installation');
         return $this->setupDatabase();
     }
     Install::setInstallState('coaster.install.databaseMigrate');
     return \redirect()->route('coaster.install.databaseMigrate');
 }