validate($server, $input); $php = new Service([ 'server_id' => $server->id, 'type' => 'php', 'type_data' => [ 'extensions' => [], 'settings' => config('core.php_settings'), ], 'name' => 'php', 'version' => $input['version'], 'status' => ServiceStatus::INSTALLING, 'is_default' => false, ]); $php->save(); dispatch(function () use ($php) { $php->handler()->install(); $php->status = ServiceStatus::READY; $php->save(); })->catch(function () use ($php) { $php->delete(); })->onConnection('ssh'); } /** * @throws ValidationException */ private function validate(Server $server, array $input): void { Validator::make($input, [ 'version' => [ 'required', Rule::in(config('core.php_versions')), ], ])->validate(); if (in_array($input['version'], $server->installedPHPVersions())) { throw ValidationException::withMessages( ['version' => __('This version is already installed')] ); } } }