MVC – Einführung durch ein eigenes kleines „Framework“

Model (M)

Nahezu jede Anwendung benötigt irgendeine Form der Datenhaltung. Die Idee hinter einer Abstrahierung durch ein Model ist, dass die Art und Weise dieser Datenhaltung (z. B. in einer Datenbank, Datei, Memcache, …) den Programmierer der Controller nicht kümmern muss.

Für unser Beispiel verwenden wir eine MySQL-Datenbank, die wir über PDO ansprechen. Da alle Models die selbe Basisfunktionalität haben werden, erstellen wir eine abstrakte Basisklasse.

Abstrakte Basisklasse für alle Models

Grundsätzlich gibt es zwei Wege ein ORM umzusetzen: Active Record und Data Mapper. Deren Unterschiede sind nicht Teil dieses Artikels, ich will nur erwähnen, dass wir hier unsere Models als Active Record implementieren.


Laden der Daten

Als Beispiel legen wir ein Model zur Benutzerverwaltung an:

Entsprechend dazu gibt es in der Datenbank eine Tabelle, in die wir auch gleich einen Testeintrag füllen.

Mit find() und findFirst() werden jetzt die Datensätze geladen. Dabei akzeptiert findFirst() eine Id als Parameter um den häufigsten Fall komfortabel zur Verfügung zu stellen.

Im Controller benutzen wir das Model folgendermaßen:

Der vollständige Code bis hierher (v0.4)


Daten anlegen und aktualisieren

Wie Daten geladen werden haben wir oben gesehen, jetzt benötigen wir noch eine Möglichkeit sie auch zu speichern. Eine rudimentäre save() Funktion könnte so aussehen:

Nachdem ein neuer Eintrag angelegt wurde, wird die Id der Datenbank abgerufen und dem Model zugewiesen. Falls die Id bereits vorhanden ist, wird in der Eintrag aktualisiert.

Um im Model bestimmte Felder mit Standardwerten vorzubelegen, können wir noch für jede Operation einen Hook anbieten (beforeCreate() und beforeUpdate()).

Implementiert das konkrete Model diese Funktion wird sie auch benutzt. Im Falle von User würden wir hier das aktuelle Datum in $this->created setzen.

Der vollständige Code bis hierher (v0.5)

Weiter mit Erweiterungsmöglichkeiten