Zend Framework – Céges Demo portál – Regisztráció – Adatkezelés XI. rész

Az eddig elkészített munka egy kis külső csinosításon esett át, lecserélésre került a dinamikusan lenyíló menüszerkezet egy új ingyenesen használható megoldásra valamint a korábban megszokott színek is változtatásra kerültek . A korábban elkészített adatbázis kapcsolati megoldás, és a regisztrációs űrlap segítségével lehetőségünk van már adatokat kezelni.

Adatok kezelésére a regisztráció miatt mindenképpen szükségünk van. Munkánkat megkönnyítve egy AlapModel Model objektumot fogunk létrehozni, tömbkezelésünk, objektumkezelésünket könnyíti majd számunkra meg ez a pár sor.

Hozzunk létre a models (MVC)könyvtárunkban egy AlapModel() objektumot vagy osztályt kinek, ahogy tetszik. Legyen a neve AlapModel.php . Ez az egyszerű kis model lesz segítségünkre az adatok mentésében elérésében. Lesz egy __set() valamint egy adatlekérő __get() metódusa az alábbi tartalommal:

<?php
class AlapModel
{
protected $_data;
protected $_id;
public function __get($index)
{
if (isset($this->_data[$index])) {
return $this->_data[$index];
}
return null;
} // public function __get($index)
public function __set($index, $value)
{
if (isset($this->_data[$index])) {
$this->_data[$index] = $value;
return true;
}
return false;
} // public function __set($index, $value)
} // class AlapModel
?>

Ezek után, minden olyan Model objektumunkat, amely egy adatbázis táblánk adatait reprezentálja, ebből az objektumból örököltessük!
Regisztrációhoz létre kell hoznunk egy Regisztracio.php Model objektumot amit az AlapModel.php objektumból fogunk örököltetni. Hozzuk létre a Regisztracio.php modelt (használhatunk ékezetes betüket a megnevezésben, de nem ajánlatos, biztos vagyok benne, hogy lesz olyan böngésző, vagy értelmező ami elakad ezen, utólag kijavítani vmit meg mindig nagyobb munka mint az elején normálisan megcsinálni).

Minden objektumnak van egy ZF construct() metódusa konstruktora, ezt mi felül is tudjuk írni a következőképpen. Nem kell mást tennünk mint írni egy saját __construct()-ort. A Regisztracio model objektumunknak lesz egy ilyen konstruktora, adatkezelést megkönnyítendő egy save() valamint egy load() metódusa is:

<?php
require_once 'models/AlapModel.php';
class Regisztracio extends AlapModel
{
public function __construct()
{
}
public function load()
{
}
public function save()
{
}
}
?>

Lássuk a __construct() metódust, szeretnénk, hogy amikor létrehozunk egy ilyen Regisztracio Model obejktumot, akkor ezzel együtt létrejöjjön egy a felhasznalok táblával megegyező adatstruktúra-tömb. Legyen a __construct() metódus tartalma így a következő:

public function __construct()
{
$this->_data = array('idfelhasznalok' => '',
'felh_email' => '',
'felh_passw' => '');
}

Tulajdonképppen létrehozunk, egy a felhasznalok adattábla felépítésével megegyező tömböt, aki PHP-ban jártas tudja, hogy a lekérdezett adat vagy adatok tömbökben tárolódnak és PHP-ben nagyon sok tömbbel akár több dimenziós tömbbel is dolgozni kell.

Ha ezzel megvagyunk, írjuk meg a save() metódust is, ez a metódus szolgál majd az űrlap adatok adatbázisba mentésének megvalósításáról:

Létrehozunk egy adatbáziskapcsolatot:

$db = Globals::getDBConnection();

Ha ez megvan megnézzük, hogy a mentendő adatnak van e már azonosítója, azaz korábban betöltöttük-e a sort(ez akkor fordulhat elő ha korábban beolvastuk adatbázisból, valami változott és vissza akarjuk menteni), ha nem, azaz most akarjuk lementeni akkor nincs azonósítója, újat fog kapni, különben meg megmarad a régi:

if($this->id){
$this->_id = $this->id;
}

létrehozzuk a data[] tömböt, ami a felhasznalok adatbázis tábla adataival megegyező tömb:

$data['idfelhasznalok'] = $this->idfelhasznalok;
$data['felh_email'] = $this->felh_email;
$data['felh_passw'] = $this->felh_passw;

értékadás is megtörténik, megkapja a származtatott objektum adatait pl $this->felh_email; formában.

Megvannak az adatok, nincs más dolgunk mint lementeni, ha új sort azaz új regisztráció történik akkor egy insert sql utasítás jön létre, míg adatmódosítás esetén egy update sql utasítás fut le adatbázis szinten. Eme kis kitérő után nem lesz nehéz kitalálni mit csinál az insert() valamint az update() ZF adatkezelő függvénye:

//ha új regisztráció
if (!$this->_id) {
$db->insert('felhasznalok', $data);
$this->_id = $db->lastInsertId();
$returnvalue = $this->_id;
}
//adatmódosítás
else {
$db->update('felhasznalok', $data, 'id = '.(int)$this->id);
$returnvalue = $this->_id;
} //
return $returnvalue;

Most lássuk egyben a save() metódust:

public function save()
{
//Adatbáziskapcsolat
$db = Globals::getDBConnection();
if($this->id){
$this->_id = $this->id;
}
$data['idfelhasznalok'] = $this->idfelhasznalok;
$data['felh_email'] = $this->felh_email;
$data['felh_passw'] = $this->felh_passw;
//ha új regisztráció
if (!$this->_id) {
$db->insert('felhasznalok', $data);
$this->_id = $db->lastInsertId();
$returnvalue = $this->_id;
}
//adatmódosítás
else {
$db->update('felhasznalok', $data, 'id = '.(int)$this->id);
$returnvalue = $this->_id;
} //
return $returnvalue;
} // public function save()

Igazából, most már megvagyunk a regisztrációhoz szükséges adatkezelési mechanizmusokkal, de ha már itt tartunk a load() metódust is készítsük el előre:

public function load($idfelhasznalok)
{
$db = Globals::getDBConnection();
$sql = 'SELECT * FROM felhasznalok WHERE idfelhasznalok = ?';
if ($result = $db->fetchRow($sql, array($idfelhasznalok))) {
$this->_data = $result;
$this->_id = $idfelhasznalok;
} // if ($result = $db->fetchRow($sql, array($acousticId)))
return;
}

Létrehozunk egy adatbáziskapcsolatot, a load() metódusunk kap egy azonosítót paraméterben, amiről tudja, hogy melyik sort azaz felhasználót kell betölenie majd. $sql változóban tároljuk a megfelelő SQL utasítást, a “?” jel a biztonságos adatkezelés miatt használják. A $db->fetchRow($sql, array($idfelhasznalok)) utasításnál az array(tömb)-ben tárolódnak azon adatok abban a sorrendben, ahogy a “?” jelek az SQL utasításban szerepelnek. A $this->_data, $this->_id utasítás segítségével, adjuk át a hívó objektumnak majd az adatokat, általában ezt másik modelben vagy eseménykezelőben tesszük majd, de semmiképpen sem a nézetben!

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s