Validácia dát

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
PaBi3
Bronze Partner | 62
+
0
-

Nebolo by dobré, kedy bola napr. metóda Nette\Forms\TextBase::validateEmail() (a jej podobné) dostupná niekde globálne? Je otravné stále písať si vlastné validátory pre veci, ktoré sú už obsiahnuté v Nette, no sú nedostupné. Pokiaľ viem, tak napr. ZF to má vyriešené cez triedu Zend_Validate. Riešenie, že „veď napíš si vlastný validátor…“ považujem za neplnohodnotné.

Ondřej Mirtes
Člen | 1536
+
0
-

Souhlasím.

Honza Kuchař
Člen | 1662
+
0
-

souhlasím

Honza Marek
Člen | 1664
+
0
-

Taky je otrava, že ty validační funkce vyžadují jako parametr formulářové prvky a ne třeba text.

romansklenar
Člen | 655
+
0
-

Souhlasím s Honzou, kdyby to šlo udělat nějak přenositelněji bylo by to fajn, ale je to detail.

sodae
Nette Evangelist | 250
+
0
-

souhlasím

David Grudl
Nette Core | 8145
+
0
-

Souhlasím :-)

A proč to tak není? Protože takovým validátorům je nutné předávat hodnotu, nikoliv prvek FormControl. A otázka je, jak úpravu udělat zpětně kompatibilně, používá-li někdo vlastní validátor.

PaBi3
Bronze Partner | 62
+
0
-

Čo je myslené pod „vlastným validátorom“? Použitie validačných metód z Nette\Forms? Nie je to tak, že ľudia tie metódy radšej prepíšu do nejakej vlastnej triedy/funkcie, než by ich nejako krkolomne (kvôli FormControl parametru) použili? Kde vlastne visí tá spätná kompatibilita?

David Grudl
Nette Core | 8145
+
0
-

Myslím konkrétně tohle https://api.nette.org/…3be3b32.html

vkuzel
Člen | 15
+
0
-

Ahoj,

co se takhle na zpětnou kompatibilitu vykašlat? Myslím tím, že všecha řešení, kde metodě validate předáváme hodnotu, případně nějaký validovatelný objekt, který nevychází z rozhraní IFormControl jsou dost přes ruku.

Co by byla podle mě úplná bombice, tak kdyby bylo možné si někde nadefinovat strom validačních pravidel/podmínek a tento strom by bylo potom možné aplikovat na model, na jeden formulář, na druhý formulář a pod. Něco podobného tomu, o co se pokouším ve vlákně Validace v modelu – dualni validace Výhoda by byla v tom, že pokud mi jdou do modelu data z více presenterů/formulářů nemusel bych stačilo by jejich validační pravidla definovat pouze na jednom místě.

K té zpětné kompatibilitě mne momentálně napadá, že by šlo vytvořit obálku pravidla, které by bylo možné předat jak objekt pravidla, tak callback na validační funkci. Podle toho, jestli by se jednalo o objekt nebo o callback by se potom mohla obálka rozhodnout, zda-li předá hodnotu nebo IFormControl. V podstatě ale jakékoli řešení ve kterém budeme požadovat validaci hodnoty a zároveň zachování kompatibility s IFormControl bude znamenat, mít nějaký rozhodovací blok který určí co kam poslat. To má ale daleko k čistému řešení.


Nebo by se dal zavést interface IProperty { public function getValue() } z IFormControl by se getValue() odstranilo, třídám ve frameworku, které interface IFormControl implementují by se přidal IProperty a ten by potom posloužil jako hodnota předná do validátoru k validaci. Stávající uživatelské validátory vyžadující objekt IFormControl by fungovaly i nadále, protože metoda getValue() by byla přítomna a nový validátor by nebyl závislý na IFormControl, který sebou táhne některé zbytečnosti pro validaci například v modelu. Nevýhoda by byla po doplnění IProperty do některých metod, že by přestaly fungovat některé uživatelské controly. Hmm, to asi nebude řešení.

vkuzel
Člen | 15
+
0
-

Nevýhoda by byla po doplnění IProperty do některých metod, že by přestaly fungovat některé uživatelské controly. Hmm, to asi nebude řešení.

Tak nebyla, protože IFormControl by mohl podědit IProperty, takže by controly fungovaly vesele dál.