Model

Aus CavoxCms Wiki

Wechseln zu: Navigation, Suche

Alle Models erben von cObject. Diese Klasse enhält viele Methoden zum Erstellen, Speichern und verwalten von Model-Objekten.

Ein Model sollte die Standarbefehle unterstützen.

Für die Benennung des Klassennamens (hier MyModule und MyModel) gelten die üblichen Namenskonventionen (Dateien in UnderlineName-Form).

class cMyModule_MyModel extends cObject {
	var $table = "%mytable";
	var $files = array();

	var $hasOne = array();
	var $hasMany = array();

	function validate(cParameters &$params){
		$this->add("title", "text", true);
		...
	}
}

Inhaltsverzeichnis

Variabeln

Alle Variabeln, die in der Datenbank gespeichert sind, werden beim Laden ins Objekt geladen und können mit $obj->key (wobei key dem Datenbank-Feldnamen entspricht) ausgelesen und gesezt werden (speichern mit der Methode cObject#save).

table

Gibt die Tabelle an, in der das Objekt gespeichert werden soll.

  • Klonbar: "%table" (wird zu "prefix_module_table")
  • Statisch: "module_table" (wird zu "prefix_module_table")

Siehe auch cDb.

files

Gibt alle Dateien an, die ausgewertet werden müssen.

Beispiele:

array("image", "file");
array("file");

Danach sind dann Beispielsweise die Attribute $obj->file (Pfad zur Datei), $obj->file_extension (Dateiextension) und $obj->file_size (Dateigrösse) definiert.

hasOne

Gibt alle direkten Relationen an.

array("zugriffskey" => "foreignModel:foreignDBKey", ...)

(zugriffskey != dbkey). Der foreignDBKey (ID des anderen Tupels) muss im Model (nicht im foreignModel) vorhanden sein, damit das Foreign Object geladen werden kann.

Zugriff:

$other = $obj->zugriffskey // sucht in der Datenbank nach der Tabelle von foreignModel nach der ID im Feld foreignDBKey des Models

hasMany

Gibt alle mehrfachen Relationen an.

array("zugriffskey" => "model2:dbkey", ...)

(zugriffskey != dbkey). Relation zwischen diesem Model und dem Model im Array (model2). In einem der beiden Models muss der dbkey vorhanden sein als IDList Array (mediumtext mysql).

array("key" => "model2:dbkey:order", ...)

So wird das Resultat nach dem Feld order sortiert.

Zugriff:

foreach($obj->zugriffskey as $other){
	...
}

Mit Zwischentabelle (m:n)

array("zugriffskey" => "model2:%cattable.thisid.model2id:order", ...)

Eigene Methoden

Alle folgenden Methoden können - müssen aber nicht - überladen werden.

validate

Wertet eine Parameterliste (normalerweise aus einem Formular) aus.

Eingehende Daten aus Formularen oder anderen Schnittstellen (XML) werden auf ihre Konsistenz geprüft. Alle Objekte sind folglich zu Beginn in dieser Form.

function validate()
function validate(cParameters &$params)
function validate(cParameters &$params, $arg) // arg kommt von cObject::load

Methoden, die NUR hier (und im Controller nach cObject::load) verwendet werden können (sind dieselben wie in cResult):

  • hasErrors()
  • setView(...)
  • inserting()
  • getID()
  • setID(...)
  • addError(...)
  • add(...)
  • addFile(...)
  • addImage(...)
  • captcha()

init

Wird auf das Objekt aufgerufen nachdem das Objekt aus der Datenbank geladen wurde. Hier können dynamisch berechnete Werte initialisiert werden.

Wichtig: Das Verwenden des Konstruktors (auch das Überladen) ist nicht möglich und es muss dafür die Methode init für diese Zwecke verwendet werden.

get_*

Wird auf die Variabel example zugegriffen, wird zuerst die Methode get_example gesucht und das Resultat zurückgeliefert. Diese Werte werden Properties (wie in C#) genannt. Sind komplexere dynamische Berechnungen nötig oder sind die Schlüssel (Variabelnnamen) nicht fix, kann auch die Methode getVar überladen werden.

Beispiel:

function get_volume(){
	return $this->width * $this->height * $this->depth; 
}
print $obj->volume;

getVar

function getVar($key){
	...

	return cObject::getVar($key); // else
}

Wird verwendet wenn dynamisch berechnete Variabeln (wie Properties in C#) verwendet werden sollen. Beim Zugriff auf eine Membervariabel wird zuerst überprüft, ob sie als var in der Klasse definiert ist, danach wird im internen Array aus der Datenbank gesucht, wird dort nichts gefunden und eine getVar-Methode ist vorhanden, wird diese aufgerufen. Liefert diese Methode null (oder ist sie gar nicht vorhanden), dann wird nach Relationen gesucht und - falls vorhanden - diese geladen.

Intern ist die Methode schon so vorhanden, dass get_*-Methoden aufgerufen werden.

Persönliche Werkzeuge