step = $step; collect(session()->get('registrationdata', [])) ->each(fn ($item, $key) => $this->{$key} = $item); } public function render(): View|ViewFactory { return view( 'livewire.registration.'.$this->step, ['step' => $this->step] )->extends('layouts.register'); } public function nextStep(): RedirectResponse|Redirector { $validatedData = Validator::make( $this->getValidateData($this->step), $this->getValidateRules($this->step), )->validate(); $registrationdata = session()->get('registrationdata', []); $mergetdRegistrationData = array_merge($validatedData, $registrationdata); session()->put('registrationdata', $mergetdRegistrationData); return redirect() ->route( 'register.step1', [ 'step' => $this->getNextStep(), ] ); } public function skipStep(): RedirectResponse|Redirector { $validatedData = $this->getValidateData($this->step); $registrationdata = session()->get('registrationdata', []); $mergetdRegistrationData = array_merge($validatedData, $registrationdata); session()->put('registrationdata', $mergetdRegistrationData); return redirect() ->route( 'register.step1', [ 'step' => $this->getNextStep(), ] ); } public function goBack(): RedirectResponse|Redirector { $nextStep = 'step'.((int) Str::replaceFirst('step', '', $this->step) - 1); return redirect() ->route( 'register.step1', [ 'step' => $nextStep, ] ); } public function finishRegistration(): RedirectResponse|Redirector { $curData = $this->getValidateData($this->step); $curRules = $this->getValidateRules($this->step); $validatedData = Validator::make( $curData, $curRules, )->validate(); $registrationdata = session()->get('registrationdata', []); $mergedRegistrationData = array_merge($validatedData, $registrationdata); $mergedRegistrationData['password_confirmation'] = $mergedRegistrationData['password']; $mergedRegistrationData['terms'] = 'yes'; $user = (new CreateNewUser())->create($mergedRegistrationData); event(new Registered($user)); Auth::login($user); return redirect()->route('profile.show', $user); } private function getValidateRules(string $key): array { return RegistrationRuleSet::getValidateRules($key); } private function getValidateData(string $key): array { return RegistrationRuleSet::getValidateData($key, $this); } private function getNextStep(): string { return 'step'.((int) Str::replaceFirst('step', '', $this->step) + 1); } }