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

cafesk8
Člen | 103
+
0
-

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)