validacni pravidlo kdyz prvek existuje v databazi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jirkamailto
Člen | 27
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

doporučuju pro callbacky používat callback('CustomFormValidators::isInDatabase') místo nativního array('CustomFormValidators','isInDatabase').

toka
Člen | 253
+
0
-

vrtak-cz napsal(a):

doporučuju pro callbacky používat callback('CustomFormValidators::isInDatabase') místo nativního array('CustomFormValidators','isInDatabase').

Jaký je v tom zásadní rozdíl?

JakubJarabica
Gold Partner | 184
+
0
-

callback okamzite testuje, ci je metoda callable.

Patrik Votoček
Člen | 2221
+
0
-

udělám něco co dělám nerad… ale nechce se mě to psát znova… callback

toka
Člen | 253
+
0
-

Díky, to mi uniklo. :-(

westrem
Člen | 398
+
0
-

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