validacni pravidlo kdyz prvek existuje v databazi
- jirkamailto
- Člen | 27
Dobry den,
potreboval bych se zeptat, jestli existuje nejaka moznost pridat validacni
pavidlo, ze se zobrazi uzivateli chybova hlaska, kdyz prvek existuje
v databazi. Ve formularich pouzivam doplnek live validator, potreboval bych,
aby se prave v tom validatoru po dopsani retezce do inputu objevila chybova
hlaska, ze zaznam existuje v databazi.
Je mozne tot zaridit primo pres funkci addRule? Predem dekuji za odpovedi.
- westrem
- Člen | 398
Ahoj,
pomocou funkcie addRule mozes pridat aj vlastny callback, vid example
pre aktualnu verziu
Co sa tyka live validacie, este som ju u Nette nepouzival, tak neviem ako sa
chova voci vlastnym callbackom.
V pripade, ze funguje na principe, ze posiela Ajaxom hned data serveru a tam
robi server side kontrolu tak mas v podstate vystarane. V inom pripade si
budes musiet napisat vlastnu obsluhu client side validatoru.
- jirkamailto
- Člen | 27
Dekuji za odpovedi, snazim se udelat nasledujici presne podle navodu od uzivatele westrem.
V presenteru mam nasledujici funkci
function validateIfExists($item, $args)
{
$basemodel = new BaseModel();
$count = $basemodel->countTableLinesOneParam('users', 'email', '%s', $item->getValue());
if ($count == 0)
{
return true;
}
else {
return false;
}
}
ve funkci, ktera pridava komponentu u formulare mam nasledujici:
$form->addText('email', "E-mail")
->addRule('validateIfExists', "Hodnota je jiz v databazi");
Bohuzel mi to nefunguje a vyhodi to nasledujici chybu:
InvalidArgumentException
Unknown operation ‚validateIfExists‘ for control ‚email‘.
Nevite kde muze byt chyba?
- jirkamailto
- Člen | 27
Dekuji, vyresil jsem to nasledovne:
$form->addText('email', "E-mail")
->addRule(FORM::FILLED, 'Zadejte email nového uživatele')
->addRule(FORM::EMAIL, 'Zadejte validní e-mail')
->addRule(array('CustomFormValidators','isInDatabase'), "Zadejte unikátní e-mail");
Editoval jirkamailto (23. 8. 2010 16:32)
- Patrik Votoček
- Člen | 2221
doporučuju pro callbacky používat
callback('CustomFormValidators::isInDatabase')
místo nativního
array('CustomFormValidators','isInDatabase')
.
- westrem
- Člen | 398
jirkamailto napsal(a):
Dekuji za odpovedi, snazim se udelat nasledujici presne podle navodu od uzivatele westrem.
V presenteru mam nasledujici funkci
function validateIfExists($item, $args) { $basemodel = new BaseModel(); $count = $basemodel->countTableLinesOneParam('users', 'email', '%s', $item->getValue()); if ($count == 0) { return true; } else { return false; } }
ve funkci, ktera pridava komponentu u formulare mam nasledujici:
$form->addText('email', "E-mail") ->addRule('validateIfExists', "Hodnota je jiz v databazi");
Bohuzel mi to nefunguje a vyhodi to nasledujici chybu:
InvalidArgumentException
Unknown operation ‚validateIfExists‘ for control ‚email‘.
Nevite kde muze byt chyba?
Problem bol v tom, ze ty si daval ako callback obycajnu funkciu, no ona sa
realne nachadzala v nejakom presenteru, takze ak by bola staticka mozes sa
k nej odkazat ako array('PresenterName', 'functionName');
alebo
pomocou vyssie spominanej funkcie callback