Selbstgebaute einfache MVC-Engine (Mini-Framework) in PHP

Einfaches MVC-Engine PHP-Framework: Ordner-Struktur:



index.php (root)
|
|-- /_Controller
|
|-- /_Model
|
|-- /_View
|
|-- /cache


Die Schaltzentrale, also das Herz ist die Datei "index.php". Diese Datei ist die "Engine" des Frameworks. Die Engine arbeitet mit einer einfachen MVC-Achitektur zusammen.
MVC = Model-View-Controller (aehnlich Eingabe-Verarbeitung-Ausgabe = Model-Controller-View). Die Eingabe entspricht dem Model (den Daten). Die Verarbeitung erledigt der Controller mithilfe des Models (Daten) und des Views. Die Ausgabe entspricht dem View. Action, User-Klick auf einen Link triggert den gleichnamigen Controller, z.B. erzeugt ein Klick auf den Link "index.php?action=contact" dass in der Engine der Controller contact.php inkludiert wird. Der Controller

_Controller/contact.php beinhaltet das Model
_Model/contact.php (mit den nackten Kontakt-Daten) und ruft anschliessend den View
_View/contact.php auf.

- index.php (Engine, alle Webseiten werden damit aufgerufen, hier wird zentral Caching und Mehrsprachen Support erledigt - ca. nur 20 Zeilen Code)
Die Engine ueberprueft, ob der angefragte Controller existiert und laedt ihn (falls bereits gecacht, dann direkt die gecachte Seite laden)


Example for an engine (including caching):




---------------------------------------------------------
File: index.php (Engine)
---------------------------------------------------------
Example for Call: index.php?action=contact
---------------------------------------------------------

$action = $_GET['action'];
$cache = 'cache/' . $action . '.html';
if (file_exists($cache)) { include $cache; exit; } // load from cache and exit
$controller = '_Controller/' . $action . '.php';
if (file_exists($controller)) // build page
{
include '_config.php';
include '_functions.php'; // functions: set_header(), set_footer(), set_cache()...
include '_languages.php';
$out = set_header();
include $controller; // Controller calls model + view, returns $block
$out .= $block;
$out .= set_footer();
set_cache($out);
}
else
{
include '_Controller/home.php'; // Unknown controller? Go to start page
}

-----------------------------------------------------------



|
+---- _functions.php (root, wird immer von index.php inkludiert)
+---- _config.php (root, wird immer von index.php inkludiert)
+---- _languages.php (root, wird immer von index.php inkludiert)
+---- _style.css (root, da oft editiert und spart dadurch Ordnerwechsel)
|



+---- /_Controller (Unterordner - hier kommen alle Actions (Seiten-Anfragen, User-Klicks auf Links) hinein, wie : index.php?action=contact )
z.B. _Controller/contact.php,
z.B. ein typischer Controller besteht aus zwei Zeilen:

include "_Model/contact.php"
include "_View/contact.php"

Der Controller inkludiert ein oder mehrere Models und Views oder andere Controller.
|
+---- /_Model (Unterordner - hier werden alle Daten bzw. Funktionen zur Datenabfrage aus Dateien, Arrays oder einer Datenbank gespeichert,
z.B. get_member_by_id() oder
$members = array( ... ) oder eine
statische CSV-Datei mit den Daten. (CSV = Comma Separated Values, OpenOffice/Excel koennen CSV-Daten exportieren und importieren)

... alle Daten bekommen einheitlich immer den Bezeichner $data - die Views erwarten immer $data als Input)
|
+---- /_View (die Praesentation-Ebene, Views konvertieren $data mittels foreach Schleifen zu HTML, aehnlich Templates)

Models und Views koennen von Controllern wiederverwendet werden, z.B. _Model/mitarbeiter_liste.php. Komplexe Seiten koennen einfach dadurch erzeugt werden, dass ein Controller mehrere andere Controller aufruft. Eine Konvention (einfach eine Festlegung) ist die Variable $block. Alle Views geben am Ende die Variable $block an den aufrufenden Controller zurueck. Eine Seite setzt sich meist aus mehreren Bloecken zusammen. Jeder View erzeugt einen Block. Die gesamte Seite wird nach einmaligen Zusammenbau gecached. Der Name der gecachten Datei entpricht dabei immer dem Name des Controllers, z.B. Klick auf den Link index.php?action=contact speichert am Ende der MVC-Kette die Datei "contact.html" im Unterornder /cache.

Die Engine index.php prueft, ob fuer diesen Controller bereits eine gecachte HTML-Seite existiert und laedt diese dann im Erfolgsfalle. Falls keine gecachte Seite existiert, dann inkludiert die Engine den Controller, die Seite wird generiert und in den Unterordner /cache geschrieben. Beim wiederholten Aufruf wird die gecachete Datei geladen ( = schneller).

Zusaetzlich beschleunigt eine Apache .htaccess Datei in der root das Laden der Seiten. Automatische Kompression (deflate/gzip) aller Text-Dateien spart bis zu 80% der zu transferierenden Dateigroesse. Alle modernen Browser koennen diese Dateien dekomprimieren. Apache prueft vorher automatisch, ob der Browser das kann. Falls nicht, wird automatisch unkomprimiert uebertragen. In .htaccess werden Etags deaktiviert, das automatische Cachen von Bildern (JPG, GIF, PNG) und CSS / JavaScript Dateien fuer wiederholt besuchte Seiten aktiviert.

Gute Hilfe beim Beschleunigen von Webseiten leisten zwei Tools:



- Google Page Speed (Firefox Addon, integriert sich in das Addon Firebug, also erst Addon Firebug dann Addon Page Speed in Firefox installieren)
http://www.linkmatrix.de/index.php?education=search&search=PageSpeed



- Website Speed Test von LightSpeedNow
http://www.linkmatrix.de/index.php?education=search&search=SpeedTestWebsite


Empfohlener LinkMatrix Artikel zur MVC-Architektur:
MVC - Model-View-Controller Design Pattern [PDF - 25 Seiten]

Passen Sie alle Beispiele Ihren Anforderungen an.

(cc) 2o1o Creative Commons CC-BY Robert Westenkirchner

SPEED (CACHED): 23.678 ms - 2017-10-24 04:09:30