Webchemistry / Wizard – vrácení chyby do formuláře

- cafesk8
 - Člen | 103
 
EDIT: SOLVED
Zdravím,
nevíte někdo jak ve webchemistry/forms-wizard přidat do formuláře chybu? Mám 3 kroky pro registraci uživatele a potřeboval bych při duplicitě e-mailu vyhodit ve formuláři chybu, u normálního formuláře mi to funguje, ale tento Wizard se zdá tuto funkci nemá.
Nenapadá Vás jak to vyřešit? Např. @Martk
class Wizard extends WebChemistry\Forms\Controls\Wizard {
	const PASSWORD_MIN_LENGTH = 7;
	/** @var Model\UserRepository */
	private $userRepository;
	/** @var Model\UserManager */
	private $userManager;
	public function __construct(Model\UserRepository $userRepository, Model\UserManager $userManager,  Session $session) {
		parent::__construct($session);
		$this->userRepository = $userRepository;
		$this->userManager = $userManager;
	}
    protected function createStep1(): Form {
        $form = $this->createForm();
		// 	inputy pro osobní údaje
        $form->addSubmit(self::NEXT_SUBMIT_NAME, 'Další');
        return $form;
    }
    protected function createStep2(): Form {
        $form = $this->createForm();
		// inputy pro kontaktní údaje
        $form->addSubmit(self::PREV_SUBMIT_NAME, 'Zpět');
        $form->addSubmit(self::NEXT_SUBMIT_NAME, 'Další');
        return $form;
    }
    protected function createStep3(): Form {
        $form = $this->createForm();
		$form->addEmail('username', 'E-mail:')
			->setRequired('Toto pole je povinné.');
		$form->addEmail('username_check', 'E-mail pro kontrolu:')
			->setRequired('Zadejte prosím e-mail ještě jednou pro kontrolu')
			->addRule(Form::EQUAL, 'E-maily se neshodují', $form['username']);
		$form->addPassword('password', 'Heslo:')
			->setOption('description', sprintf('Heslo musí obsahovat min. %d znaků', self::PASSWORD_MIN_LENGTH))
			->setRequired('Vytvořte si prosím heslo.')
			->addRule($form::MIN_LENGTH, null, self::PASSWORD_MIN_LENGTH);
        $form->addSubmit(self::PREV_SUBMIT_NAME, 'Zpět');
        $form->addSubmit(self::FINISH_SUBMIT_NAME, 'Registrovat');
        // tady jsem zkoušel i $form->onSubmit[] funkci kde bylo $form['username_check']->addError('...');
        return $form;
    }
    protected function finish(): void {
        $values = $this->getValues();
		try {
			$this->userManager->add($values);
		} catch (Model\DuplicateNameException $e) {
			// tady jsem zkoušel všechno možné ...
			$this->getComponent('step3')->addError('Username is already taken.');
			return;
		}
    }
}
EDIT
Vyřešeno ve form->onAnchor[] v step3:
$form->onAnchor[] = function (Form $form) use ($values): void {
   	if($form->isSubmitted()) {
		try {
			$this->userManager->add($values);
		} catch (Model\DuplicateNameException $e) {
			$form->addError('Tento e-mail je již používán.');
			return;
		}
	}
}
					Editoval cafesk8 (24. 6. 2019 16:33)