Willkommen zurück beim PHP MVC Pattern Tutorial Teil 2.
Heute wollen wir uns mit einfachen Base-klassen beschäftigen.
Beginnen wir mit der Bootstrap klassen.
1 2 3 4 5 6 7 |
class Bootstrap { public function __construct() { $controller_path = 'controllers'; $url = isset($_GET['url']) ? $_GET['url'] : null; $url = rtrim($url , "/"); $url = explode ('/' , $url); |
Als erstes überprüfen wir ob die Superglobale $_GET über den Index URL verfügt, wenn ja speichern wir den Wert in der Variable $url , wenn nicht speichern wir den Wert null in der Variable.
Nun entfernen wir die Leerräume in den String $url durch die rtrim Funktion. Am Ende zerteilen wir die Varibale in ein Array mittels der Explode Funktion.
1 2 3 4 5 6 7 |
if(empty($url[0])){ require_once $controller_path.'/startseite.php'; $controller = new startseite(); $controller->index(); return false; } |
Wir überprüfen ob der wer $url mit dem Index [0] leer ist. wenn er leer ist binden wir den Controller für die Starte mittel der require_once Funktion
Nun Instanzieren wir den Controller startseite() mittels new in das Object $controller.
Als letztes starten wir die Methode Index() und geben den Wert false zurück.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$file = $controller_path.'/'.$url[0] .'.php'; if(file_exists($file)){ require_once $file; } else{ $this->error(); } } |
Wenn die Variable $url mit dem Index[0] nicht leer ist, dann füllen wir die Variable $file mit den String der ersten Zeile. Also den festgelegten Controllerpath / dann den Controller namen und zum Schluss die Endung php.
Nach Überprüfung ob die Datei existiert , binden wir diese bei Erfolgt ein und bei miss erfolgt werfen wir einen Error zurück.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$controller = new $url[0]; $controller->LoadModel($url[0]); //calling method array if(isset($url[2])){ if(method_exists($controller, $url[1])){ $controller->{$url[1]}($url[2]); } else{ $this->error(); } } else{ if(isset($url[1])){ if(method_exists($controller, $url[1])){ $controller->{$url[1]}(); } else{ $this->error(); } } else{ $controller->index(); } } } |
Nun legen wir in das Object $controller die neue Klasse mittel den new Operator und dem String aus $url an dem Index [0].
Standardmäßig suchen wir nach dem gleichnamigen Model mittels $controller->LoadModel(). Nun haben wir eine if abfrage die überprüft ob nur eine Methode aufrufen oder eine Methode mit Parametern. im if Teil prüfen wir ob es Parameter gibt mittels isset($url[2]) . wenn es dieser Wert gibt müssen wir den $controller dynamisch mit Parameter starten, wenn nicht starten wir nur die Methode die in $url[1] übergeben wird.
Wenn keine Methode in $url[1] übergeben wird starten wir die Standard Methode index();
1 2 3 4 5 6 7 |
function error() { require_once ('controllers/error.php'); $controller = new Error_throw(); $controller->index(); return false; } |
Das ist unsere error Funktion wir binden den Error Controller ein.
Starten die instanzieren den Controller .
und Starten seine Index() Funktion.
Danach werfen wir false zurück.
Im nächsten Tutorial erstellen wir unsere Controller Base-Klasse.
Juli 17, 2018 at 4:08 am
Outstanding post but I was wanting to know if you could write a litte more on this subject?
I’d be very thankful if you could elaborate a little bit further.
Cheers!
September 21, 2018 at 7:08 am
bookmarked!!, I really like your web site!
September 24, 2018 at 9:48 am
Hi! I could have sworn I’ve been to this blog before
but after checking through some of the post I realized it’s new to
me. Anyways, I’m definitely delighted I found it and I’ll be book-marking and checking back often!
November 2, 2018 at 1:37 am
Wow, that’ѕ wһat І waѕ seeking f᧐r, wһat a іnformation! preѕent here at this webpage,
thɑnks admin ߋf this site.
Dezember 15, 2018 at 8:43 pm
You actually make it seem really easy with your presentation however I to find this matter to be actually something which I believe I would never understand.
It sort of feels too complex and extremely large
for me. I’m having a look forward on your subsequent post, I will attempt to get the hold of it!