Was ist Routing überhaupt?
Unter dem Routing versteht man die funktionale Aufteilung einer URL bzw. eines Requests an eine Webseite, in verschiedene Funktionsbereiche. Ein typisches Routing wie das folgende:
webseite.de/kategorie/beitrag
Route eines Beitrags
unterteilt den Request dementsprechend in eine Kategorie und in einen Beitrag auf. Dementsprechend ist Parameter 1 die Angabe der Kategorie und Parameter 2 der betreffende Beitrag den der Leser anfordert. Würde der Leser folglich:
webseite.de/kategorie
Route einer Kategorie
im Browser als URL anfordern, wüsste das CMS, das es sich um eine Kategorie handelt und nicht um einen Beitrag.
Standardrouting im FlightCMS
FlightCMS nutzt ein solches Standard-Routing, wie es eingangs schon beschrieben ist und weist jeder dieser Routen eine Funktion zu. Nachdem das Flight Microframework im Startscript index.php geladen wurde, kann es die Routen erkennen und eine Verarbeitung durch einen dedizierten Controller je Route starten.
Flight::route('/', function () {
// Verarbeitung der Startseite ==>
});
Flight::route('/@category', function ($category) {
// Verarbeitung einer Kategorie ==>
});
Flight::route('/@category/@post', function ($category, $post) {
// Verarbeitung eines Beitrags ==>
});
Standardrouten
Mit diesem Routing ist das Content Management System in der Lage auf die folgenden drei Routen zu reagieren:
- webseite.de/
- webseite.de/kategorie/
- webseite.de/kategorie/beitrag
und kann in Abhängigkeit dieser drei Zustände eine spezielle Verarbeitung ausführen, wie zum Beispiel die Landingpage zeigen, eine Kategorie laden oder einen konkreten Beitrag im Browser des Lesers anzeigen.
Im fertigen CMS müssen natürlich noch weitere Routen angelegt werden, die sich beispielsweise um das Fehlerhandling kümmern falls mehr als die dreistufige Route verarbeitet werden muss. Dazu aber später mehr.
Der Controller
FlightCMS nutzt das so genannte MVC-Pattern (Model View Controller) für die pragmatische Unterteilung des Programmcodes in kleine logische Funktionseinheiten. Im konkreten Fall, treffen Sie beim Routing bereits auf die so genannten Controller dieser Programm-Vorschrift.
Controller sind als Steuereinheiten (reguläre PHP-Programme) zu verstehen, die Parameter entgegen nehmen können und die Verarbeitungen in einen programmatischen Ablauf bringen. Wie der Name schon sagt, kontrolliert und regelt er eine spezifische Verarbeitung, greift jedoch nicht direkt auf Daten zu (wird durch das Model abgewickelt). Folglich würde die index.php wie folgt um die so genannten Controller erweitert werden:
Flight::route('/', function () {
$controller = new HomeController();
});
Flight::route('/@category', function ($category) {
$controller = new CategoryController($category);
});
Flight::route('/@category/@post', function ($category, $post) {
$controller = new PostController($category, $post);
});
Controller
Dementsprechend haben Sie einen HomeController.php
, der sich um die Verarbeitung kümmert, wenn der Leser die Startseite besucht. Der CategorieController.php
startet die Verarbeitung, wenn der Leser eine Kategorie über den Browser vom CMS anfordert. Und letztendlich den PostController.php
, der sich um die Verarbeitung eines konkreten Beitrags kümmert.
Hiweis: das MVC-Pattern ist keine eigenständige Programmiersprache, sondern eine Richtlinie, wie Programmcode sinnvoll in übersichtliche Funktionseinheiten untergliedert wird. Da MVC eher als Vorschlag zu verstehen ist, steht es Ihnen natürlich vollkommen frei sich strikt daran zu halten oder von diese Vorschrift hier und da nach eigenem Geschmack abzuweichen.
Parameter für den Controller
Das Flight Microframework ist in der Lage, die Route in Parameter zu unterteilen und diese dem Controller zu übergeben, damit er diese Information weiter verarbeiten kann.
In \
gibt es keinen Parameter, denn der Leser ist in der Startseite und der Pfad dahin ist dem CMS bekannt, denn er ist fix. Mit dem Parameter @category
übergibt das Framework dem CategoryController.php
den beliebigen Namen der gewünschten Kategorie.
Durch der Parameter @post
erhält der PostController.php
die Information, welcher konkrete Beitrag durch das CMS geladen werden soll.
Das Model
Das so genannte Model ist dafür gedacht, die Daten aus der Datenbank oder einem Flatfile zu beschaffen und diese dann an den Aufrufer, dem Controller, zu übergeben. Im Falle des FlightCMS, greift das Model auf ein Flatfile zu und liest die dortigen Daten aus und gibt sie zurück an den Aufrufer.
Die Datenstruktur des Flafiles unterliegt der YAML-Syntax und siet etwa so aus:
~~~
Title: Lorem ipsum
Author: FlightCMS
Date: 01.01.2024
Logo: /img/logo.jpg
Description: Lorem ipsum dolor sit amet, consetetur sadipscing elitr...
~~~
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum dolor sit amet.
...
Struktur des Beitrags
Die View ist eine HTML-Schablone
Eine View im MVC-Pattern, ist als HTML-Vorlage bzw. Vorschrift zu verstehen. Mit der View definieren Sie einmalig eine Vorlage, wie beispielsweise ein Beitrag im Browser des Lesers auszusehen hat. Diese Definition wird im CMS einmalig erzeugt, und vielfach für ganz unterschiedliche Beiträge verwendet
<html>
<head>
...
</head>
<body>
<h1> {Title} </h1>
<p> {Description} </p>
<p> {Content} </p>
</body>
</html>
HTML Template
Die oben gezeigte rudimentäre View stellt ein typisches HTML-Rahmengerüst einer Webseite dar. Statt diese Seite mit konkreten Daten zu füllen, werden dort Platzhalter eingesetzt, die das CMS später auf Anfrage durch den Leser mit echten Daten füllt.
Natürlich werden Sie im Downloadpaket des FlightCMS deutlich mehr Views erkennen (dies ist der dynamischen Entwicklung des Projektes geschuldet), der Artikel soll lediglich einen schematischen Einstig in das Thema Views bilden.