Custom validace formuláře, nechce se mi zobrazit hláška
- microcz
- Člen | 62
Podle návodu na https://doc.nette.org/cs/forms se snažím vytvořit vlastní validace pro uživatelský login. Takto vypadá má funkce pro vytvoření formuláře:
protected function createComponentSignInForm() {
// Create form
$logForm = new Form();
$logForm->addText('login', $this->tr('login.login'))
->setRequired($this->tr('login.required.login'));
$logForm->addPassword('password', $this->tr('login.password'))
->setRequired($this->tr('login.required.pass'));
$logForm->addCheckbox('remember', $this->tr('login.remember'));
$logForm->onSuccess[] = array($this, 'signInFormSubmitted');
$logForm->onValidate[] = array($this, 'validateSignInForm');
// Create submit button
$class = 'ui-button ui-state-default ui-corner-all ui-button-text-only';
$submit = $logForm->addSubmit('loginButton', $this->tr('login.button'));
$submit->setAttribute("class", $class);
return $logForm;
}
Takto vypadá validační funkce:
public function validateSignInForm(Form $form) {
// Find user
$values = $form->getValues();
$login = $values['login'];
$user = (new Dao\ApplicationUser())->setDb($this->db)->loadByLogin($login);
// If user does not exist, add error
if (!$user->isPopulated()) {
$form['login']->addError("KRUCINAL PROC SE NEZOBRAZIM");
}
}
Pokud jsou vstupy správné, nebo jsou validovány pomocí zabudovaných nette validací, vše funguje bezvadně. Jakmile ale zadám špatný uživatelský login a očekával bych, že se mi zobrazí chybová hláška z „validateSignInForm“, nic se nestane. Přitom do podmínky „if (!$user->isPopulated()) {“ se vstoupí, protože když tam dám výjimku, tak se vyhodí. Já už vážně netuším co můžu dělat špatně, poradíte?
Editoval microcz (14. 6. 2014 16:50)
- microcz
- Člen | 62
Tak už jsem přišel na to, co jsem dělal blbě…nedal jsem v latte vypsat errory k prvkům formuláře, naivně jsem se domníval, že {input login} je vypíše automaticky.
Nicméně rád bych se ještě zeptal zda následující výpis chyby lze zapsat nějak „pohodlněji“ na jeden řádek :)
{form signInForm}
<fieldset class="fieldset ui-widget-content ui-corner-bottom ui-corner-tr">
<div class="prop">
<span class="propname">{label login/}</span>
<span class="propvalue">
{input login}
{if $form['login']->hasErrors()}
<span class="error">{$form['login']->errors[0]}</span>
{/if}
</span>
</div>
<div class="prop">
<span class="propname">{label password/}</span>
<span class="propvalue">{input password}</span>
</div>
<div class="prop">
<span class="propname">{label remember/}</span>
<span class="propvalue">{input remember}</span>
</div>
</fieldset>
<div class="buttonpane ui-widget ui-buttonset">
<span style="padding-right: 10px;">{input loginButton}</span>
<span style="padding-right: 10px;">{control registerButton}</span>
<span style="padding-right: 10px;">{control resetButton}</span>
</div>
{/form signInForm}
Editoval microcz (14. 6. 2014 18:20)