Validační pravidlo ve formuláři se nezobrazuje
- Allconius
- Člen | 313
Ahoj, tohle nechápu, mám 2 validační pravidla na dvou textových polích a to validateOC a validateDomainEmail
<?php
$form->addText('oscislo', ' Osobní číslo:', 10, 6)
->setDefaultValue($oscislo)
->setRequired('Osobní číslo musí být vyplněno')
->addCondition(Form::FILLED)
->addRule([$this, 'validateOC'], 'Toto OC neexistuje.');
$form->addText('email', 'Email:')
->setEmptyValue('@')
->addCondition(Form::FILLED)
->addRule(Form::EMAIL, 'Email nemá správný formát.')
->addRule([$this, 'validateDomainEmail'], 'Tento e-mail není platný.');
?>
validateDomainEmail je v pohodě, ale to validateOC se mi vůbec nezobrazuje v šabloně:
<?php
<div class="form-group required">
<div class="col-sm-3 control-label"><label for="frm-editForm-oscislo" class="required"> Osobní číslo:</label></div>
<div class="col-sm-9"><input type="text" name="oscislo" maxlength="6" size="10" id="frm-editForm-oscislo" required data-nette-rules='[{"op":":filled","msg":"Osobní číslo musí být vyplněno"}]' class="text"></div>
</div>
<div class="form-group">
<div class="col-sm-3 control-label"><label for="frm-editForm-email">Email:</label></div>
<div class="col-sm-9"><input type="text" name="email" id="frm-editForm-email" data-nette-rules='[{"op":":filled","rules":[{"op":":email","msg":"Email nemá správný formát."}],"control":"email"}]' data-nette-empty-value="@" value="@" class="text"></div>
</div>
?>
zobrazuje se jen to „Osobní číslo musí být vyplněno“ ale ten control úplně chybí, zkoušel jsem vymazat temp ale nic, tak to nějak nechápu
- David Matějka
- Moderator | 6445
já tam teda nevidim ani validateDomainEmail
– tyhle custom
validační pravidla se totiž neexportují do JS. fungujou pouze pokud jsou
jako statická funkce: https://doc.nette.org/…s/validation#…
to, co nejde validovat pouze v JS, musíš řešit nějak custom ajax voláním třeba
- Allconius
- Člen | 313
David Matějka napsal(a):
já tam teda nevidim ani
validateDomainEmail
– tyhle custom validační pravidla se totiž neexportují do JS. fungujou pouze pokud jsou jako statická funkce: https://doc.nette.org/…s/validation#…to, co nejde validovat pouze v JS, musíš řešit nějak custom ajax voláním třeba
Ahoj, máš pravdu opravdu to v tom zdrojáku není, myslel jsem, že je to to „control“ ale to patří k tomu „addRule(Form::EMAIL“, asi mám jen nastavené špatně to validační pravidlo, že to pokaždé projde …
<?php
/** @return bool */
public function validateOC($ocControl)
{
$value = $ocControl->getValue();
return $this->dbManager->ocExists($value);
}
?>
a v dbManager:
<?php
public function ocExists($oc)
{
if ((count($this->najdiOC($oc))) > 0) {
return false;
} else {
return true;
}
}
?>
tedy pokud najde shodu tak by to mělo být false a formulář by se měl odeslat, ale nějak to odesílá vždycky ať tam dám cokoliv …
- David Matějka
- Moderator | 6445
odesílat se bude, jelikož k té validaci dochází až na serveru.
nebo chceš říct, že se volá onSuccess?
budeš to muset oddebugovat – třeba vrátit vždy false, případně si dumpnout, že se ta funkce zavolá.
- Allconius
- Člen | 313
David Matějka napsal(a):
odesílat se bude, jelikož k té validaci dochází až na serveru.
nebo chceš říct, že se volá onSuccess?
budeš to muset oddebugovat – třeba vrátit vždy false, případně si dumpnout, že se ta funkce zavolá.
ano volá se onSuccess, ten e-mail tak funguje, že to píše „Tento e-mail není platný.“ dokud se nevyplní platná doména. Tzn. třeba cbfvdss@afasf.xx při pokusu o uložení neprojde
- David Matějka
- Moderator | 6445
no a další kroky si zkoušel? když vrátíš z ocExists false, tak validace taky projde? pokud ne, máš asi chybu v najdiOC
- Allconius
- Člen | 313
David Matějka napsal(a):
no a další kroky si zkoušel? když vrátíš z ocExists false, tak validace taky projde? pokud ne, máš asi chybu v najdiOC
ano když to změním na :
<?php
public function ocExists($oc)
{
if ((count($this->najdiOC($oc))) > 0) {
return false;
} else {
return false;
}
}
?>
tak to pokaždé vypíše „Toto OC neexistuje.“ tak tam mám jen nějak obráceně logiku