JS validace data v Nette 0.9

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

Dobré odpoledne,

ve formuláři potřebuji ověřit, zda uživatelem zadané datum splňuje nějaké podmínky. Server-side validace podle příkladů („addRule(MyClass::MyValidator…“) už mi funguje, ale rád bych zprovoznil i javascriptovou validaci, aby se všechna pole chovala stejně. Můžete mě někdo nasměrovat správným směrem, kudy do toho? Ideálně v rámci možností původní Nette 0.9 – s novou verzí (2.0-dev released on 2011–02–06) mi nějak formulář vůbec neběhá…

Ď.

studna
Člen | 181
+
0
-

Jaký máš problém u Nette dev?

Nette si generuje svou javascriptovou validaci, ale když si tam dáš vlastní callback, tak je problém. Buď si musíš napsat pro daný control vlastní JS validaci a v továrničce ji jenom šikovně navěsit a nebo formuláře odesílat ajaxově a validovat formulář na serveru.

Editoval studna (27. 2. 2011 10:44)

HappyBear
Člen | 10
+
0
-

Jaký máš problém u Nette dev?

Můj základní problém je ten, že jsem – co se PHP a Nette týče – naprostý amatér a začátečník. :-( Problém s Nette dev už jsem ale vyřešil (názvy prvků formuláře mi začínaly číslicí, což javascriptu z v0.9 nevadilo, leč javascript z v2.0 na tomto havaroval), přesto nejsem řešení svého problému o nic blíže.

Buď si musíš napsat pro daný control vlastní JS validaci a v továrničce ji jenom šikovně navěsit

Ano, toto už jsem _teoreticky_ pochopil, ale potřeboval bych asi nějakou _praktickou_ ukázku podobného kódu, neb na teoretické rovině se nějak stále nechytám…

a nebo formuláře odesílat ajaxově a validovat formulář na serveru.

Tak do těchto výšin zatím opravdu neaspiruji… :-)

Chbox
Člen | 125
+
0
-

Začínat se učit PHP na Nette mi nepřijde jako ideální postup…

HappyBear
Člen | 10
+
0
-

Život holt není ideální… :-) Já jsem potřeboval hlavně nějak spáchat několik různých přihlašovacích formulářů, což je s Nette/Forms rozhodně snazší než bez nich…

Pokud se najde někdo, kdo má po ruce potřebný kus kód a bude se ochoten podělit, budu mu velice zauzlován, případně za odkaz na nějaký veřejně dostupný příklad, kde se toto řeší… Zde na fóru i v Nette dokumentaci už jsem pátral pár hodin, ale stále na správný postup nepřišel… :-(

Chbox
Člen | 125
+
0
-

nevím, jestli to tp pomůže ale po zadání do rozšířeného vyhledávaní „Vlastní validační pravidlo“ je jako 2. odkaz: https://forum.nette.org/…typ-pravidla

studna
Člen | 181
+
0
-

HappyBear napsal(a):
Ano, toto už jsem _teoreticky_ pochopil, ale potřeboval bych asi nějakou _praktickou_ ukázku podobného kódu, neb na teoretické rovině se nějak stále nechytám…

V javascriptu si napíšeš kousek kódu, který se aktivuje například událostí blur na inputu s id #validate. To snad zvládneš. V jQuery by to vypadalo asi takto:

<script>
$("#validate").blur(
	function(){
		// kod pro samotnou validaci
	}
);
</script>

více máš tady: http://api.jquery.com/blur/

V továrničce na formulář pak si pomocí getControlPrototype() vytáhneš HTML daného controlu a nastavíš mu atribut id.

<?php
$form['control']->getControlPrototype()->id = "#validate";
?>

více máš tady: https://doc.nette.org/cs/forms

Tak do těchto výšin zatím opravdu neaspiruji… :-)

AJAX není výšina, pořád je to PHP a javascript. :)

HappyBear
Člen | 10
+
0
-

Děkuji uctivě. :-) Zatím se kupodivu chytám, přesto mám obavu můj problém trvá. Ve formuláři nepoužívám live validaci, pole se validují „klasicky“ v okamžiku kliknutí na submit button, čili při použití výše uvedené konstrukce by se pole s vlastním validátorem stále chovalo jinak než všechna ostatní – akorát by nebylo „pozadu“ jako dosud (standardní Nette server-side validace s výpisem chyby nad formulář), ale pro změnu „napřed“… Opravdu neexistuje možnost, jak vlastní javascriptovou validaci nějak „zařadit“ mezi ostatní („Nette-generované“) validační fce, aby se volala společně s nimi a uživatel nepozoroval žádný rozdíl?

studna
Člen | 181
+
0
-

Nemusíš se držet funkce blur. Můžeš udělat něco ve stylu

<script>
$("form").submit(
	function()
	{
		// zjistis hodnotu inputu s id #validate a provedes svoji validaci
	}
)
</script>
HappyBear
Člen | 10
+
0
-

Omlouvám se za odmlku a děkuji za všechny tipy. Nakonec jsem zvolil variantu brod a vykašlal se na custom validaci přímo v javascriptu, alébrž nechám normálně proběhnout server-side validaci a pouze jsem na onLoad navěsil jednoduchou fci, která chyby Nette vypsané nad formulář ještě navíc vyhodí jako alert, aby je uživatel nepřehlédl a nedivil se, proč klikl na Odeslat a nic se nestalo… Určitě to není košer postup, ale celá ta aplikace je jeden velký bastl, takže se to již ztratí…