安装引导表单提交增加ajax验证数据库连接

This commit is contained in:
TL 2022-09-06 15:49:58 +08:00 committed by Edward Yang
parent 542f777fb0
commit a3ce0b63d0
4 changed files with 49 additions and 3 deletions

View File

@ -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;
}
}
}

View File

@ -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',

View File

@ -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',

View File

@ -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');
});