vlastní validační pravdilo, nefunguje
- batko
- Člen | 219
mám kod, ale bohužel mi to formulář pustí dál za každých okolností.
Nevíte kde by mohla být chyba?
$form->addText("zip", "Vaše psč:")
->addRule(callback($this, 'zipExist'), 'Psč neexituje');
public function zipExist($zip) {
$zip= $zip->getValue();
$count = dotaz do DB
if (count($count) == 0) {
return TRUE;
} else {
return FALSE;
}
}
- petr.pavel
- Člen | 535
Předpokládáš, že rozhoduje návratová hodnota validační funkce, což
není pravda.
https://doc.nette.org/cs/forms#…
Neuvedl jsi verzi Nette. Pro 2.0.* musíš použít
$this->valid = FALSE;
Případně pokud chceš i vyhodit
chybovou hlášku ve funkci, tak $this->addError("...");
(které
nastavuje $this->valid
samo).
- vvoody
- Člen | 910
@peter.pavel: callback v onValidate a callback v addRule je rozdiel. Ty hovoríš o prvej možnosti, batko o druhej kde imo je práve návratová hodnota podstatná.
@batko: typujem že v $count máš nejaký integer prípadne numeric string, takže ten count($count) nedáva zmysel, narozdiel od prípadu keby parameter funkcie count() bolo pole alebo nejaký iterátor. Ale to len typujem lebo nepoznám presný kód ktorý si (neviem prečo) neuviedol.
Editoval vvoody (2. 3. 2014 16:09)
- batko
- Člen | 219
petr.pavel napsal(a):
Předpokládáš, že rozhoduje návratová hodnota validační funkce, což není pravda.
https://doc.nette.org/cs/forms#…Neuvedl jsi verzi Nette. Pro 2.0.* musíš použít
$this->valid = FALSE;
Případně pokud chceš i vyhodit chybovou hlášku ve funkci, tak$this->addError("...");
(které nastavuje$this->valid
samo).
Opravdu potřebuji validovat jen jedno vstupní pole.
NETTE 2.1.1
- batko
- Člen | 219
vvoody napsal(a):
Pri spracovaní formu tam tá hodnota zip je?
ano, ona se zavolá i ta funkce mám tam všude dumpy a vydupmuje se to. zkouším už to tři hodiny a nic, nechápu kde může být chyba
public function zipExist($zip) {
dump($zip->getValue());
$zip = trim(str_replace(" ", "", $zip->getValue()));
$count = count($this->cityRepository->findByZip($zip));
if ($count == 0) {
return FALSE;
} else {
return TRUE;
}
}
- batko
- Člen | 219
$form = $this->form();
$yes = $form->addContainer('yes');
$yes->addText("zip", "Vaše psč:")
->addRule(callback($this, 'zipExist'), 'Psč neexituje')
->addRule(Form::MIN_LENGTH, "Psč zadejte ve formátu 12345 nebo 123 45", 5)
->addRule(Form::MAX_LENGTH, "Psč zadejte ve formátu 12345 nebo 123 45", 6);
$form->addSubmit("submit", "odeslat");
$form->onSubmit[] = $this->test;
return $form;
public function zipExist($zip) {
$zip = trim(str_replace(" ", "", $zip->getValue()));
$count = count($this->cityRepository->findByZip($zip));
if ($count == 0) {
return FALSE;
} else {
return TRUE;
}
}
- David Matějka
- Moderator | 6445
onSubmit je spatny event, ten se vola vzdy bez ohledu na validaci. pouzij onSuccess