Custom validace formuláře, nechce se mi zobrazit hláška

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
microcz
Člen | 62
+
0
-

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
+
0
-

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)

Tabetha
Člen | 140
+
0
-

malo by stačiť toto :), prípadne by si na to mohol dať foreach tiež :)

<span n:if="$form['login']->hasErrors()" class="error">{$form['login']->errors[0]}</span>