Hallo zusammen,
in den letzten Tagen beschäftigt mich immer wieder folgende Überlegung: Wie gestalte ich das Routing von Request-Parametern dynamischer und effizienter? Mein momentanes Vorgehen möchte ich in aller Kürze vorstellen.
In der index.php wird ein Front-Controller instanziiert. Diesem wird per Konstruktur das $_GET-Array übergeben, welches anschließend in einer switch-Anweisung landet. Anhand der verschiedenen Fälle wird entweder ein weiterer Controller geladen, bspw.:
oder es wird ein Model geladen und dessen Daten an einen View übergeben, z.B.:
Angenommen es wird ein weiterer Controller geladen, wie in diesem Falle der Gästebuch-Controller, ist dessen Konstruktur recht ähnlich gestaltet im Vergleich zum Front-Controller. Wieder findet sich eine switch-Anweisung, wobei anhand der verschiedenen Fälle entweder ein weiterer Controller geladen wird oder eine Action-Methode aufgerufen wird, wie z.B.:
Prinzipiell ist der Verschachtelung bzw. Tiefe keine Grenze gesetzt. Mich stört allerdings gewaltig, dass jeder Konstruktur eine mal längere oder auch kürzere switch-Anweisung enthält. Auch habe ich den Eindruck, das dies wohl keine gängige Vorgehensweise ist. Demnach würde mich interessieren, welche Vorgehensweise ihr für das Routing pflegt. Schließlich muss der Controller wissen, welche Methoden er aufzurufen hat bzw. ob das Laden eines weiteren Controllers notwendig ist.
Bei mir erledigen das im Moment ausschließlich switch-Anweisungen, die je nach Umfang der Klasse ziemlich sperrig wirken. Wie sieht es bei euch aus?
in den letzten Tagen beschäftigt mich immer wieder folgende Überlegung: Wie gestalte ich das Routing von Request-Parametern dynamischer und effizienter? Mein momentanes Vorgehen möchte ich in aller Kürze vorstellen.
In der index.php wird ein Front-Controller instanziiert. Diesem wird per Konstruktur das $_GET-Array übergeben, welches anschließend in einer switch-Anweisung landet. Anhand der verschiedenen Fälle wird entweder ein weiterer Controller geladen, bspw.:
PHP-Code:
case 'gästebuch':
require_once 'gaestebuch_controller.php';
$controller = new Gaestebuch_Controller($request);
break;
PHP-Code:
default:
$model = new Content('default');
$main = new View;
$main->setTemplate('template/content.inc.php');
$main->setVar('title', $model->getTitle());
$main->setVar('data', $model->getData());
Site::set('main', $main);
PHP-Code:
case 'beitrag-schreiben':
$this->createEntry();
break;
Bei mir erledigen das im Moment ausschließlich switch-Anweisungen, die je nach Umfang der Klasse ziemlich sperrig wirken. Wie sieht es bei euch aus?
Kommentar