diff --git a/beike/Installer/Controllers/EnvironmentController.php b/beike/Installer/Controllers/EnvironmentController.php index 22263d98..6c44ae2b 100644 --- a/beike/Installer/Controllers/EnvironmentController.php +++ b/beike/Installer/Controllers/EnvironmentController.php @@ -58,7 +58,7 @@ class EnvironmentController extends Controller return $redirect->route('installer.environment')->withInput()->withErrors($validator->errors()); } - if (! $this->checkDatabaseConnection($request)) { + if ($this->checkDatabaseConnection($request) !== true) { return $redirect->route('installer.environment')->withInput()->withErrors([ 'database_connection' => trans('installer::installer_messages.environment.db_connection_failed'), ]); @@ -74,6 +74,28 @@ class EnvironmentController extends Controller return redirect(route('installer.database', $params)); } + public function validateDatabase(Request $request) + { + $rules = config('installer.environment.form.rules'); + $messages = [ + 'environment_custom.required_if' => trans('installer::installer_messages.environment.name_required'), + ]; + + $validator = Validator::make($request->all(), $rules, $messages); + + if ($validator->fails()) { + return json_fail('', $validator->errors()); + } + + $dbValidateResult = $this->checkDatabaseConnection($request); + if ($dbValidateResult !== true) { + return json_fail('', $dbValidateResult); + } + + return json_success(''); + } + + /** * TODO: We can remove this code if PR will be merged: https://github.com/RachidLaasri/LaravelInstaller/pull/162 * Validate database connection with user credentials (Form Wizard). @@ -110,9 +132,26 @@ class EnvironmentController extends Controller try { DB::connection()->getPdo(); + + return true; } catch (Exception $e) { - dd($e); - return false; + $result = []; + switch ($e->getCode()) { + case 2002: + $result['database_hostname'] = trans('installer::installer_messages.environment.db_connection_failed_host_port'); + $result['database_port'] = trans('installer::installer_messages.environment.db_connection_failed_host_port'); + break; + case 1045: + $result['database_username'] = trans('installer::installer_messages.environment.db_connection_failed_user_password'); + $result['database_password'] = trans('installer::installer_messages.environment.db_connection_failed_user_password'); + break; + case 1049: + $result['database_name'] = trans('installer::installer_messages.environment.db_connection_failed_database_name'); + break; + default: + + } + return $result; } } } diff --git a/beike/Installer/Lang/en/installer_messages.php b/beike/Installer/Lang/en/installer_messages.php index 3aeddf77..63525c73 100644 --- a/beike/Installer/Lang/en/installer_messages.php +++ b/beike/Installer/Lang/en/installer_messages.php @@ -69,6 +69,9 @@ return [ 'app_name_label' => 'App Name', 'app_name_placeholder' => 'App Name', 'app_environment_label' => 'App Environment', + 'db_connection_failed_host_port' => 'Database host or port error!', + 'db_connection_failed_user_password' => 'Database username or password error!', + 'db_connection_failed_database_name' => 'Database name not exist!', 'app_environment_label_local' => 'Local', 'app_environment_label_developement' => 'Development', 'app_environment_label_qa' => 'Qa', diff --git a/beike/Installer/Lang/zh_cn/installer_messages.php b/beike/Installer/Lang/zh_cn/installer_messages.php index 1ce8644d..863b5129 100644 --- a/beike/Installer/Lang/zh_cn/installer_messages.php +++ b/beike/Installer/Lang/zh_cn/installer_messages.php @@ -65,6 +65,9 @@ return [ 'app_url_placeholder' => '输入您的应用URL', 'db_connection_failed' => '无法连接到数据库!', 'db_connection_label' => '数据库连接', + 'db_connection_failed_host_port' => '数据库主机或端口错误!', + 'db_connection_failed_user_password' => '数据库账号或密码错误!', + 'db_connection_failed_database_name' => '数据库名不存在!', 'db_connection_label_mysql' => 'mysql', 'db_connection_label_sqlite' => 'sqlite', 'db_connection_label_pgsql' => 'pgsql', diff --git a/beike/Installer/Routes/installer.php b/beike/Installer/Routes/installer.php index adfc9b30..61cd1932 100644 --- a/beike/Installer/Routes/installer.php +++ b/beike/Installer/Routes/installer.php @@ -21,6 +21,7 @@ Route::prefix('installer') Route::get('lang/{lang}', [WelcomeController::class, 'locale'])->name('lang.switch'); Route::get('environment', [EnvironmentController::class, 'index'])->name('environment'); Route::post('environment/save', [EnvironmentController::class, 'saveWizard'])->name('environment.save'); + Route::post('environment/validate_db', [EnvironmentController::class, 'validateDatabase'])->name('environment.validate_db'); Route::get('database', [DatabaseController::class, 'index'])->name('database'); Route::get('final', [FinalController::class, 'index'])->name('final'); });