Validácia dát
- PaBi3
- Bronze Partner | 62
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é.
- Honza Marek
- Člen | 1664
Taky je otrava, že ty validační funkce vyžadují jako parametr formulářové prvky a ne třeba text.
- romansklenar
- Člen | 655
Souhlasím s Honzou, kdyby to šlo udělat nějak přenositelněji bylo by to fajn, ale je to detail.
- David Grudl
- Nette Core | 8218
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
Č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?
- vkuzel
- Člen | 15
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í.