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)