Form register – overeni existujciho jmena nebo emailu

lukyn_94
Člen | 12
+
0
-

Zdravím , prosím o pomoc když zadám email nebo jméno který je už v db tak to nezvaliduje a nevypíše tu hlášku že email je již zaregistrovaný

Presenter :

$form->addText('email', 'Email :')
			 ->addRule(function($item, $arg) use ($t){return !  $t->userModel->fetchOneBy(['email' => $item->value]);}, 'Email je již zaregistrován !')
			 ->addRule(Form::FILLED, 'Zadejte email !')
			 ->addRule(Form::EMAIL, 'Zadaný email není správně !')
			 ->setAttribute('placeholder', '@');

Model :

	public function fetchOneBy(array $where)
	{
		return $this->db->table('user')->where($where)->limit(1)->fetch();
	}

A formulář vykresluji ručně v latte .

Děkuji za každou pomoc .

David Matějka
Moderator | 6445
+
0
-

vykricnik je tam spravne, vypisujes v sablone chyby?

lukyn_94
Člen | 12
+
0
-
<form n:name=registerForm class=form>

  <div class="form-group row">
      <label for="username" class="col-sm-2 col-form-label">Nick :</label>
      <div class="col-sm-3">
        <input type="text" class="form-control" id="username" placeholder="Nick" n:name=username>
      </div>
    </div>

  <div class="form-group row">
      <label for="password" class="col-sm-2 col-form-label">Heslo :</label>
      <div class="col-sm-3">
        <input type="password" class="form-control" id="password" placeholder="****" n:name=password>
      </div>
    </div>

  <div class="form-group row">
      <label for="password_control" class="col-sm-2 col-form-label">Heslo znovu:</label>
      <div class="col-sm-3">
        <input type="password" class="form-control" id="password_control" placeholder="****" n:name=password_control>
      </div>
    </div>

  <div class="form-group row">
      <label for="email" class="col-sm-2 col-form-label">E-mail :</label>
      <div class="col-sm-3">
        <input type="email" class="form-control" id="email" placeholder="@" n:name=email>
      </div>
    </div>

  <div class="form-group row">
      <label for="" class="col-sm-2 col-form-label">
      <div class="form-check">
        <label class="form-check-label">
          <input type="checkbox" n:name=agree class="form-check-input"> Registrováním souhlasíte s podmínkami
        </label>
      </div>
      </label>
      <div class="col-sm-3">
        <input n:name=register class="btn btn-outline-info">
      </div>
    </div>

</form>
lukyn_94
Člen | 12
+
0
-

Jinak to hodí hlášku zaregistrováno vykřičník tam musí být .

Ondřej Kubíček
Člen | 494
+
0
-

když manuálně vykresluješ form, musíš i manuálně vykreslit chyby viz https://doc.nette.org/…ms/rendering#…

<ul class="errors" n:if="$form->hasErrors()">
    <li n:foreach="$form->errors as $error">{$error}</li>
</ul>
David Matějka
Moderator | 6445
+
+3
-

chyby nikde nevypisujes, je nekolik moznosti:

1. pro automaticke vykreseni chyb muzes pouzit

{$form->render(errors)}

2. pripadne jen chyby formulare, ktere se nevazou k zadnemu prvku

{$form->render(ownErrors)}

3. rucne vykreslit vsechny nebo vlastni chyby formulare pres

<ul class="errors" n:if="$form->getOwnErrors()">
    <li n:foreach="$form->getOwnErrors() as $error">{$error}</li>
</ul>

respektive getErrors pro vsechny chyby
4. pro konkretni chyby prvku muzes pouzit makro inputError:

{inputError email}

je dobre v kombinaci s n makrem ifcontent

<div class="error" n:ifcontent>{inputError email}</div>

tak ti to vykresli ten div pouze v pripade, ze ma obsah
5. pripadne muzes vyuzit metody na jednotlivych prvcich: https://api.nette.org/…Control.html#…
pres

{if $form['email']->hasErrors()}
....
{/if}
lukyn_94
Člen | 12
+
0
-

Děkuji moc pánové tu dokumentaci budu muset víc našprtat :))