Ignorování validace inputu ve formuláři pomocí addRule a anonymní funkce
- 2bad2furious
- Člen | 26
Ahoj,
nejsem si jistý, co dělám špatně. Používám anonymní funkce při
kontrole formuláře a příjde mi, že je uplně jedno, jestli to vrátí true
nebo false. Vždy se dostanu k succeed metodě, kde to samozřejmě spadne.
Zkoušel jsem i natvrdo vracet false/true při kontrole ale je to
úplně jedno.
Mimochodem, nějáké nápady na „zhezčení“ kódu?
Předem díky za pomoc. :)
$form = new Form();
$form->addText(UserManagement::USERNAME, UserManagement::USERNAME_LABEL)
->setRequired(UserManagement::USERNAME_REQUIRED)
->addRule(Form::MIN_LENGTH, UserManagement::USERNAME_MIN_LENGTH_TEXT, UserManagement::USERNAME_MIN_LENGTH)
->addRule(function (\Nette\Forms\Controls\TextInput $username) {
return $this->getUserManager()->isUsernameOk($username->getValue());
}, UserManagement::USERNAME_ALLOWED_CHARS)
->addRule(function (\Nette\Forms\Controls\TextInput $username) {
return $this->getUserManager()->isUsernameUnique($username->getValue());
}, UserManagement::USERNAME_EXISTS)
->addRule(Form::MAX_LENGTH, UserManagement::USERNAME_MAX_LENGTH_TEXT, UserManagement::USERNAME_MAX_LENGTH);
$form->addEmail(UserManagement::EMAIL, UserManagement::EMAIL_LABEL)
->setRequired(UserManagement::EMAIL_REQUIRED)
->addRule(function (\Nette\Forms\Controls\TextInput $email) {
return $this->getUserManager()->isEmailUnique($email->getValue());
}, UserManagement::EMAIL_EXISTS)
->addRule(function (\Nette\Forms\Controls\TextInput $email) {
return $this->getUserManager()->isEmailOk($email->getValue());
}, UserManagement::EMAIL_MX_ERROR);
$form->addPassword(UserManagement::PASSWORD_1, UserManagement::PASSWORD_LABEL, null, UserManagement::PASSWORD_MAX_LENGTH)
->setRequired(UserManagement::PASSWORD_REQUIRED)
->addRule(function (\Nette\Forms\Controls\TextInput $password) {
return $this->getUserManager()->isPasswordOk($password->getValue());
}, UserManagement::PASSWORD_MIN_SECURITY)
->addRule(Form::MIN_LENGTH, UserManagement::PASSWORD_MIN_LENGTH, UserManagement::PASSWORD_MIN_LENGTH);
$form->addPassword(UserManagement::PASSWORD_2, UserManagement::PASSWORD_VERIFY_LABEL, null, UserManagement::PASSWORD_MAX_LENGTH)
->setRequired(UserManagement::PASSWORD_VERIFY_REQUIRED)
->addRule(Form::EQUAL, UserManagement::PASSWORD_MUST_MATCH, $form[UserManagement::PASSWORD_1]);
$form->addSubmit("register", UserManagement::SIGN_UP_SUBMIT_LABEL);
$form->onSubmit[] = [$this, 'signUpFormSucceeded'];
return $form;
Editoval 2bad2furious (4. 8. 2017 12:26)
- David Matějka
- Moderator | 6445
pouzivas totiz onSubmit a ne onSuccess. onSubmit se vola vzdy, bez ohledu na to, zda se to spravne zvalidovalo
- 2bad2furious
- Člen | 26
Díky za odpověď. Mám však další problém, nezobrazují se mi message z backend-checkování. V td s inputem se mi udělá span.error, je ale prázdný.
Edit–
Vyřešeno.
Proč form renderer překládá dvakrát?
Do DefaultFormRenderer::renderErrors dorazí error už přeložený, tam ho chce
překládat znova.
Kde se dají dávat podměty k úpravě? Mám jich pár nashromážděno.
Editoval 2bad2furious (4. 8. 2017 14:49)
- CZechBoY
- Člen | 3608
Podněty můžeš dát na github do issues, případně rovnou upravené s pull requestem.
Ke zhezčení kodu: můžeš tam dát třeba prázdný řádky a je to už celkem čitelné.
$form = new Form();
$form->addText(UserManagement::USERNAME, UserManagement::USERNAME_LABEL)
->setRequired(UserManagement::USERNAME_REQUIRED)
->addRule(Form::MIN_LENGTH, UserManagement::USERNAME_MIN_LENGTH_TEXT, UserManagement::USERNAME_MIN_LENGTH)
->addRule(function (\Nette\Forms\Controls\TextInput $username) {
return $this->getUserManager()->isUsernameOk($username->getValue());
}, UserManagement::USERNAME_ALLOWED_CHARS)
->addRule(function (\Nette\Forms\Controls\TextInput $username) {
return $this->getUserManager()->isUsernameUnique($username->getValue());
}, UserManagement::USERNAME_EXISTS)
->addRule(Form::MAX_LENGTH, UserManagement::USERNAME_MAX_LENGTH_TEXT, UserManagement::USERNAME_MAX_LENGTH);
$form->addEmail(UserManagement::EMAIL, UserManagement::EMAIL_LABEL)
->setRequired(UserManagement::EMAIL_REQUIRED)
->addRule(function (\Nette\Forms\Controls\TextInput $email) {
return $this->getUserManager()->isEmailUnique($email->getValue());
}, UserManagement::EMAIL_EXISTS)
->addRule(function (\Nette\Forms\Controls\TextInput $email) {
return $this->getUserManager()->isEmailOk($email->getValue());
}, UserManagement::EMAIL_MX_ERROR);
$form->addPassword(UserManagement::PASSWORD_1, UserManagement::PASSWORD_LABEL, null, UserManagement::PASSWORD_MAX_LENGTH)
->setRequired(UserManagement::PASSWORD_REQUIRED)
->addRule(function (\Nette\Forms\Controls\TextInput $password) {
return $this->getUserManager()->isPasswordOk($password->getValue());
}, UserManagement::PASSWORD_MIN_SECURITY)
->addRule(Form::MIN_LENGTH, UserManagement::PASSWORD_MIN_LENGTH, UserManagement::PASSWORD_MIN_LENGTH);
$form->addPassword(UserManagement::PASSWORD_2, UserManagement::PASSWORD_VERIFY_LABEL, null, UserManagement::PASSWORD_MAX_LENGTH)
->setRequired(UserManagement::PASSWORD_VERIFY_REQUIRED)
->addRule(Form::EQUAL, UserManagement::PASSWORD_MUST_MATCH, $form[UserManagement::PASSWORD_1]);
$form->addSubmit("register", UserManagement::SIGN_UP_SUBMIT_LABEL);
$form->onSubmit[] = [$this, 'signUpFormSucceeded'];
return $form;