form->fill(); } protected function getFormSchema(): array { return [ Wizard::make([ RequirementsStep::make(), EnvironmentStep::make($this), DatabaseStep::make($this), CacheStep::make($this), QueueStep::make($this), SessionStep::make(), ]) ->persistStepInQueryString() ->nextAction(fn (Action $action) => $action->keyBindings('enter')) ->submitAction(new HtmlString(Blade::render(<<<'BLADE' Finish BLADE))), ]; } protected function getFormStatePath(): ?string { return 'data'; } public function submit(UserCreationService $userCreationService): void { try { // Disable installer $this->writeToEnvironment(['APP_INSTALLED' => 'true']); // Run migrations $this->runMigrations(); // Create admin user & login $user = $this->createAdminUser($userCreationService); auth()->guard()->login($user, true); // Write session data at the very end to avoid "page expired" errors $this->writeToEnv('env_session'); // Redirect to admin panel $this->redirect(Dashboard::getUrl()); } catch (Halt) { } } public function writeToEnv(string $key): void { try { $variables = array_get($this->data, $key); $variables = array_filter($variables); // Filter array to remove NULL values $this->writeToEnvironment($variables); } catch (Exception $exception) { report($exception); Notification::make() ->title('Could not write to .env file') ->body($exception->getMessage()) ->danger() ->persistent() ->send(); throw new Halt('Error while writing .env file'); } Artisan::call('config:clear'); } public function runMigrations(): void { try { Artisan::call('migrate', [ '--force' => true, '--seed' => true, ]); } catch (Exception $exception) { report($exception); Notification::make() ->title('Migrations failed') ->body($exception->getMessage()) ->danger() ->persistent() ->send(); throw new Halt('Error while running migrations'); } if (!$this->hasCompletedMigrations()) { Notification::make() ->title('Migrations failed') ->danger() ->persistent() ->send(); throw new Halt('Migrations failed'); } } public function createAdminUser(UserCreationService $userCreationService): User { try { $userData = array_get($this->data, 'user'); $userData['root_admin'] = true; return $userCreationService->handle($userData); } catch (Exception $exception) { report($exception); Notification::make() ->title('Could not create admin user') ->body($exception->getMessage()) ->danger() ->persistent() ->send(); throw new Halt('Error while creating admin user'); } } }