Problém s vlastnou validáciou formuláru

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

Zdravím všetkých možno to bude nejaká naozaj banalita ale prezrel som už veľmi veľa topicov na fóre čo sa týka tejto problematiky ale nefunguje mi nič, skúšal som aj na IRC sa popýtať chalanov no nevedeli mi už ani oni pomôcť tak preto sa skúšam obratiť na fórum.

Mám problém s vlastnou validáciu formulára. Neviem prečo ale nech to robím či cez callback alebo cez t.z. anonymnú funkciu nič mi nefungovalo ani len nepridalo do HTML parametru data-nette-rules. Mám verziu nette 2.0.1. Na používam doplnok Live Form Validation for Nette 2.0 od užívateľa Radek Ježdík. Verziu PHP mám 5.3.

Môj presenter:

<?php
....
$form['oldPassword']->addRule(function ($control) {
                  return false;
             }, 'Toto uživatelské jméno je již registrováno');

...
?>

return false; to si nevšímajte to je iba na skúšku no nefunguje to ani tak.

Skúšal som to aj takto:

<?php
....
$form['oldPassword']->addRule(callback($this, 'checkPass'), 'Toto uživatelské jméno je již registrováno');

public function checkPass($control){
	return false;
}

...

?>

Žiadnu chybu to nikde nepíše ani na stránke, ani v logoch, ani po odoslaní formuláru len proste nevypíše ani nekontroluje danú podmienku proste ako keby tam nič nebolo to preskočí proste.

Vopred ďakujem za odpovede.

jtousek
Člen | 951
+
0
-

Jak by se callback mohl přidávat do data-nette-rules? Tahle validace se může provést až po odeslání formuláře na serveru, javascript tohle emulovat nemůže.

Leda by to šlo ajaxem, možná to umí tenhle addon.

pwnedko
Člen | 24
+
0
-

Ďakujem za zbytočnú odpoveď, trošku skús si prečítať čo som napísal a jaký addon používam na validáciu.

jtousek
Člen | 951
+
0
-

pwnedko napsal(a):

Ďakujem za zbytočnú odpoveď, trošku skús si prečítať čo som napísal a jaký addon používam na validáciu.

Aj tak to jo. Omlouvám se, nepřečetl jsem si to pořádně.

Podíval jsem se na ten addon – je to pouze jeden javascriptový soubor, takže je zcela zřejmé, že se orientuje pouze tím, co je v data-nette-rules. Callbacky se v data-nette-rules samozřejmě neobjeví takže tento addon nemá žádnou možnost jak by se vůbec dověděl o existenci daného pravidla.

pwnedko
Člen | 24
+
0
-

Ďakujem ti za odpoveď. Skúsim to teda vyriešiť iným spôsobom ale zaujimalo by ma akým spôsobom by sa dalo ajaxom validovať callbacky ?

jtousek
Člen | 951
+
0
-

Přiznám se, že to by mě zajímalo taky. Jednak by v data-nette-rules (nebo jinde) musela být ta informace. Pak by to asi muselo jít přes nějaký signál toho formuláře, který by to zpracoval a vrátil formuláři bool odpověď zda validace prošla.

pwnedko
Člen | 24
+
0
-

Presne tak som si myslel, že by to aj mohlo fungovať ,že by to pridalo do data-nette-rules. No nič ide sa skúsim nadtým zamyslieť. Jednoznačne ďakujem za odpoveď a pomoc.

jtousek
Člen | 951
+
0
-

Kdyby se ti to povedlo implementovat jako addon, respektive fork toho, který používáš, myslím že by to spousta lidí ocenila. ;-)

castamir
Člen | 629
+
0
-

Napadá mě možná trošku prasácké řešení, ale nešlo by to přidávat prvku přes setAtributte a do js skriptu přidat obdobný test jako na obsah nette-data-rules?

Editoval castamir (20. 5. 2012 17:51)

pwnedko
Člen | 24
+
0
-

Ale myslím si ,že je to dobré riešenie. Idem to hneď vyskúšať a potom sem hodím kód ak sa mi to podarí.

ViPEr*CZ*
Člen | 817
+
0
-

No jako addon to je dost složité, neboť to bude závislé na nějaké databázi. Já bych to dělal tak, že bych si normálně do submittu odeslal data a až pak bych v té metodě spracovávající odeslání formu ověřoval jméno uživatele, které bylo odesláno a addErrorem bych vložil chybu a neodeslal data do DB.

jtousek
Člen | 951
+
0
-

Cílem je udělat addon pro asynchronní validaci i těch pravidel které jsou řešené pomocí callbacků – zda ten callback používá databázi je tedy irelevantní a na db to závislé není.

Editoval jtousek (20. 5. 2012 19:04)

pwnedko
Člen | 24
+
0
-

Tak som to robil aj do teraz ako si mi ty navrhol len teraz som to chcel vyriešiť callbackom v addRule pretože som používal ajaxovú validáciu formulárov a chcel som aj toto live validovať preto som sa začal týmto problémom zaoberať.

ViPEr*CZ*
Člen | 817
+
0
-

Hmmm, ten callback si stejně budu muset vždy doprogramovat. Jak jsi ajaxově validoval? Pokud to máš jak jsem psal, tak ti ajaxem zpět muselo chodit info o té chybě a to stačilo nějak zobrazit.
Podle mě se jedná třeba konkrétně o toto: https://doc.nette.org/cs/forms#…
Pokud se pletu, pak je potřeba upravit dokumentaci.

pwnedko
Člen | 24
+
0
-

Použil som addon ,ktorý tu bol už spomenutý. Tak vlastne formumulár validujem live (ajaxovo) čiže ešte pred odoslaním formuláru. Hento čo si ty sem dal je prípadná validácia už ked sa vykoná submiť formulára. Ale to som ja nechcel ja chcem zachytiť vynímiku toho callbacku ešte predtým ako odošlem formulár.

ViPEr*CZ*
Člen | 817
+
0
-

pwnedko napsal(a):

Použil som addon ,ktorý tu bol už spomenutý. Tak vlastne formumulár validujem live (ajaxovo) čiže ešte pred odoslaním formuláru. Hento čo si ty sem dal je prípadná validácia už ked sa vykoná submiť formulára. Ale to som ja nechcel ja chcem zachytiť vynímiku toho callbacku ešte predtým ako odošlem formulár.

Ano. Ale i tak je potřeba aspoň odeslat nick či jméno a to porovnat zda-li už je zaregistrované. Pokud to nechceš dělat v samotném submitu, pak si vytvoř JS obsluhu submitu a v ní před samotným submitem musíš odeslat to jméno ajaxem a ověřit. Samotné jméno pak vzít z nějakého input prvku toho formu.

pwnedko
Člen | 24
+
0
-

Ja som sa dočítal na fóre ,že napr. anonymnou funkciu ako napr. :

<?php
....
$form['oldPassword']->addRule(function ($control) {
                  return false;
             }, 'Toto uživatelské jméno je již registrováno');

...
?>

Je vlastne parameter $control ,ktorý obsahuju zadanú hodnotu takže myslím si ,že by to išlo validovať aj live.