Az adatvalidálást az Úr találta ki azzal, hogy megadta nekünk a juzert, aki vagy nem akarja, vagy alapból nem tudja mit kell kitölteni a formon, vagy milyen formátumú adatot kell beírni. Bemutatunk ehhez egy könnyen kezelhető validátor classt, és egy eljárást, hogy is használjuk.
Példánkban kérjünk be:
- e-mail címet: szükséges ($email)
- webcímet: opcionális ($web)
- születési dátum: opcionális ($bday) //2000-03-03
- a user nevét: szükséges ($name)
A változókba bekerültek az értékek, döntsük el, hogy helyesek-e, vagy újra be kell kérni.
A működés tehát:
$validator = new validator();
$validator->item($email, array("required","email"),array("Hiányzó e-mail cím!","Hibás e-mail cím"));
$validator->item($web, array("url"),array("Hibás webcím"));
$validator->item($bday, array("date"),array("Hibás születési dátum"));
$validator->item($name, array("required"),array("Hiányzó név"));
if ($validator->valid()){
//az adatok helyesek, dolgozhatunk tovább
} else {
//nem nyert, ez az üzenet, újra be kell kérni az adatokat
$message = $validator->message();
}
// $validator->item(változó, array("szabály 1","szabály 2"),array("üzenet, ha az első false","üzenet, ha a második false"));
Természetesen a tömbök n elemig bővíthetőek, és a két tömb elemszáma egyező legyen, hogy mindegyikhez kapjunk hibaüzenetet.
További lehetőségek:
if (nagyon bonyolult feltétel és sok){
$validator->set_valid(false,"üzenet, ha false, mert manualisan állítottuk be a hibát");
}
$items = array(
"email"=>$email,
"web"=>$web,
"bday"=>$bday,
"name"=>$name
);
$rules = array(
"email"=>array(array("required","email"),array("Hiányzó e-mail cím!","Hibás e-mail cím")),
"web"=>array(array("url"),array("Hibás webcím")),
"bday"=>array(array("date"),array("Hibás születési dátum")),
"name"=>array(array("required"),array("Hiányzó név"))
);
$validator->validate($rules, $items);
if ($validator->valid()){
// a korábbi formula
}
Ez annyiban különbözik, hogy a $validator->item(); tömbből fogja megkapni az értékeit. Miért jó ez? Ebben az esetben például:
<input type="text" name="adat[email]" /> <input type="text" name="adat[web]" /> <input type="text" name="adat[bday]" /> <input type="text" name="adat[name]" />
POST után a változók a $_POST["adat"] tömbben lesznek. Ekkor: $items = $_POST["adat"];
Így ha új mező kerül a formba, csak a html-t kell módosítani, és a rules array-t. Ennek igazán akkor van haszna, ha rengeteg mező van egy formon, ebben az esetben a $rules változó külön kiírható egy fileba, amit a “felhasználó” is tud módosítani
, átláthatóbbá válik a kezelés.
Az újrahasznosítás jegyében validátorunkat classként használjuk, így a feltételek folyamatosan bővíthetők a fejlesztések közben(új case elemmel), ha esetlegesen új validálási igények jönnek be.
Akik szeretik a többnyelvű alkalmazásokat, azok is használhatják, hiszen fix string helyett a nyelvi változóban az ide fenntartott szöveg is berakható, mint változó.
A class itt tölthető le, vagy itt tekinthető meg. Na?
én nem szeretem az ilyen külön validator classokat. ezeknek a metódusoknak tipikusan egy environment osztályban lenne a helyük, amit mindig megörököl az éppen aktuálisan használt regisztráció, login, fórum, akármilyen class. hogy ezután az adott classban még ki tudd egészíteni olyan speciális, csak ott használt validálással az egész folyamatot, mint pl. juzernév foglaltságának az ellenőrzése (db).
nálam alap classok vannak. ezekből épül fel egy oldal leegyszerűsítve monjuk egy phpben mondjuk. egyik class terméke megy mondjuk a másik classnak. ha nincs szükség egy classra nem építem be. nem tudom mi a jó….
táblakezelő class + validator = registration class. // persze van benne plusz dolog is.
táblakezelő + címkéző osztály = galéria class // itt is van plusz dolog.
így van nálam
zsolti: az miert specialis? isExist – field, table, value, mikor adjon hibat (ha talal v. nem talal), pl:
$exists = array (‘email’ => array(FALSE, ‘users’, ‘email’, $email));
$vars->areExist($exists);
$exists_data = $vars->getExistsData();
if ($exists_data['email']['status'] == INACTIVE) $vars->addError(‘email’, ‘inactive’);
En a hiba tipusat, valtozo nevet szoktam megadni + parametereket, igy a hibauzenethez tartozo azonosito automatikusan kepzodik, pl: ERR__ azaz ERR_EMAIL_INACTIVE
Ami meg erdekes lehet h. pl, ha tartomanyt, hosszusagot vizsgalunk akkor atadom az ertekeket es a generalt hibauzenet szovegeben ezek hasznalhatoak, pl: ERR_LOGIN_SHORT – Túl rövid felhasználói név (minimum: %min% karakter)!
Ezek jo dolgok, szeretem a validator class-t
Szerintem jó dolog. Az ötlet nem új, de magyar narancs
nem tudom ki meddig látta, de valahogy valamelyik valamilyen jóképeségű orosz droid megtörte a wp-t immár nemtom hanyadszor. Jó ez a wp.
Felkeltette a kíváncsiságomat ez a blog a legütősebb mondatával
ööö, mégpedig?