Form register – overeni existujciho jmena nebo emailu
- lukyn_94
- Člen | 12
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 .
- lukyn_94
- Člen | 12
<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>
- Ondřej Kubíček
- Člen | 494
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
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}