Ich habe einiger Fragen bezüglich Record-Klassen und DVO usw. Nun sehe ich hier und auch in anderen Foren öfters Record-Klassen, wie sie Criz hier vorgestellt hat. So wie ich das verstanden habe, ist die Aufgabe der Record-Klasse lediglich, Daten aufzunehmen und bei Anfragen wieder rauszugeben (getter, setter). Dann gibt es noch die DVO, die eine Abbildung der Datenquelle sein sollen. Eigentlich geht es mir nur darum, zu erfahren, wie die Datenquelle-Abfragen kontrolliert werden.
Kommt also ein Besucher auf eine Seite, so ist das DVO ja noch nicht zugewiesen und die Record-Klasse ebenfalls leer. So, jetzt gibt der Besucher zur Registrierung einen Usernamen ein. Wo wird nun die Datenquelle-Abfrage gemacht, so dass der Benutzer weiß, ob es Username zur Verfügung steht oder nicht.
Ich möchte hier noch meine Model und Manager-Klassen einbinden und bitte darum, mir zu sagen, ob ich zumindest auf dem richtigen Weg bin.
Kommt also ein Besucher auf eine Seite, so ist das DVO ja noch nicht zugewiesen und die Record-Klasse ebenfalls leer. So, jetzt gibt der Besucher zur Registrierung einen Usernamen ein. Wo wird nun die Datenquelle-Abfrage gemacht, so dass der Benutzer weiß, ob es Username zur Verfügung steht oder nicht.
PHP-Code:
$property = array('username' => $_POST['username'], 'email' => $_POST['email']);
if($welcheKlasseIstHierfürZuständig?->fragDieDatenquelle('username', $property['username'])) {
$user = new Record_User();
$user->import($property);
$welcheKlasseIstHierfürZuständig?->speicherInDatenquelle();
}
PHP-Code:
abstract class Model
{
private $_db;
private $_table;
private $_columns = array();
private $_praefix;
private $_condition;
protected function __construct(array $properties)
{
$this->_db = Registry::getInstance()->database;
$this->_table = lcfirst(substr(get_class($this), 0, strpos(get_class($this), "Manager")));
$this->_praefix = substr($this->_table, 0, 1);
$this->_columns = array_keys($properties);
}
/**
*
*/
public function save()
{
try {
$properties = array();
foreach($this->_columns as $value) {
if($value != $this->_praefix.'id') {
if($this->$value){
$properties[$value] = $this->$value;
}
}
}
$save = $this->_db->insert($this->_table, implode(', ', array_keys($properties)))
->values($properties)
->execute('insert');
pre($save);
}
catch(Exception $e) {
pre($e->getMessage());
}
}
/**
* read the database based on the given condition
* @param string $condition
*/
protected function read($condition)
{
try {
$row = $this->_db->select(implode(', ', $this->_columns))
->fromTable($this->_table)
->where($condition, $this->$condition)
->execute()
->fetchIt();
pre($this->$condition, 1);
return $row;
}
catch(Exception $e) {
pre($e->getMessage());
}
}
/**
* set the class variables
*
* @param string $index
* @param mixed $value
*/
public function __set($index, $value)
{
if(in_array($index, $this->_columns)) {
$this->$index = $value;
}
else {
pre($index.' << is not a class variable');
return false;
}
}
/**
* get the class variables
*
* @param string $var
*/
public function __get($name)
{
if(in_array($name, $this->_columns)) {
return $this->$name;
}
else {
pre($name.' << is not a class variable');
return false;
}
}
}
PHP-Code:
class UserManager extends Model
{
// diese Variablen sind eventuell eine Sache des DVO
// aber ich weiß nicht, wie ich die DVO einbinden soll
protected $uid;
protected $username;
protected $password;
protected $email;
protected $fullname;
protected $sex;
protected $birthday;
protected $member_since;
protected $is_active;
public function __construct()
{
parent::__construct(get_object_vars($this));
}
/**
* check if email allready in use
*/
public function getUserByEmail($email)
{
$this->email = $email;
return $this->read('email');
}
/**
* check if username is already in use
*/
public function getUserByUsername($username)
{
$this->email = $username;
return $this->read('username');
}
public function getUserById()
{
}
public function save()
{
$this->password = md5(rand());
$this->member_since = time();
$this->username = rnd();
parent::save();
}
}