MVC in PHP ohne Extra-Frameworks
"MVC" steht für "Model View Controller" und steht für ein Architektur-Muster, wie er gerne für den Aufbau einer Website, bzw. einer Web App genutzt wird.
Wer einmal das Prinzip verstanden hat, wird nicht mehr ohne es arbeiten wollen. Es ermöglicht Wiederverwendbarkeit einzelner Module und teilt das Projekt klar in "Informationen/Daten" (Model), "Darstellung" (View) und "Steuerung" (Controller).
Anhand eines Beispiel-Projektes möchte ich gerne den Nutzen und die Vorteile von MVC erläutern.
Starten eines Projektes
Voraussetzung dieses Tutorials sind Kenntnisse in PHP. Wenn du das Tutorial mitmachen willst, solltest du mindestens PHP 5.x installiert haben (lokal z.B. über XAMPP). Bei diesem Tutorial arbeite ich lokal unter Windows. Wenn du unter anderen Bedingungen arbeitest, solltest du dies also berücksichtigen.
Los geht's
Erstelle dort, wo deine PHP-Projekte liegen, einen neuen Ordner namens meine-mvc-app
. Bei mir ist das C:\\xampp\htdocs\
.
Öffne den Ordner in einen Code-Editor, bzw. Entwicklungsumgebung deiner Wahl. Ich nutze dafür Brackets. Erstelle eine neue Datei: index.php
Die index.php
wird automatisch von Apache aufgerufen, wenn /meine-mvc-app
im Browser aufgerufen wird. Rufe http://localhost/meine-mvc-app
in deinen Browser auf und du erhältst eine leere Seite. Diese gilt es jetzt zu füllen.
Wir starten von hinten: "C" für "Controller"
Beim Besuchen der Website, bzw. der Web App, wird als erstes ein Controller-Objekt erzeugt. Die Aufgabe des Controllers ist es, etwas zu machen. Entweder er zeigt etwas an, oder er bearbeitet irgendwas.
Anlegen der Klasse "Controller"
Um ein Controller-Objekt erzeugen zu können, brauchen wir eine Controller-Klasse. Erstelle ein Ordner in deinem Projekt namens classes
. Erstelle darin eine PHP-Datei namens Controller.php
.
Schreibe Folgendes in die Datei classes/Controller.php
:
class Controller { }
Was passiert hier? Sollte noch recht eindeutig sein: Ich lege die Klasse Controller
an. Ich werde die Klasse später noch füllen.
Anlegen unseres Controller-Objektes
Die eben erstellte Klasse ist der Bauplan für unser Controller-Objekt, welches wir nun in unserer index.php
-Datei anlegen wollen.
Öffne index.php
und schreibe dieses:
require_once "./classes/Controller.php";
$mein_controller = new Controller();
Ich binde unsere Klassen-Datei mit require_once
einmal ein. Dann erstelle ich eine neue Instanz der Klasse Controller
und weise diese $mein_controller
zu.
Momentan nützt uns das aber noch nichts, weil in Controller
noch nichts steht. Das ändern wir jetzt.
Die erste Controller-Methode zum Aufrufen der Startseite
Wenn ich eine Website oder eine Web App besuche, werde ich üblicherweise durch eine Startseite begrüßt. Das soll unsere erste Controller-Methode übernehmen.
Öffne classes/Controller.php
und fülle die Klasse (zwischen class Controller {
und }
):
public function home() { }
Eins nach dem anderen: function main()
sollte dir vom "normalen" PHP bekannt vorkommen. Es ist ein Unterprogramm, macht also irgendwas. Das public
ist eine Eigenart der Objektorientierung. Es macht aus der Funktion eine Methode der Klasse Controller
und macht diesen für außen aufrufbar (deswegen "public"). Neben public
gäbe es auch noch private
. Das wird später aber nochmal drankommen.
Die Datei classes/Controller.php
müsste nun so aussehen:
class Controller { public function home() { } }
Weiter mit index.php: Aufruf der ersten Controller-Methode
Unser Controller-Objekt haben wir bereits erstellt. Nun soll direkt dessen Methode home()
aufgerufen werden.
Öffne dafür index.php
und füge das hinzu:
$mein_controller->home();
Die gesamte Datei sieht dann so aus:
require_once "./classes/Controller.php";
$mein_controller = new Controller(); $mein_controller->home();
Dies bewirkt ebenfalls noch gar nichts, da wir noch nichts zum Anzeigen haben. Dafür brauchen wir unsere "Views". Damit geht es jetzt weiter.
Jetzt wird es schön: "V" für "Views
Die Darstellung der Website oder der Web App wird in eigene Dateien ausgelagert. Lege dafür erst einmal einen Ordner namens views
im Hauptverzeichnis deines Projektes an.
Erstelle dann dort die View für unsere Startseite: home.php
. Diese Datei soll dann zum größten Teil aus HTML bestehen.
Ich benutze html_bones, um mir den Grundaufbau der Seite zu schaffen: