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>