Warum wird bei PHP-Frameworks das Routenkonzept verwendet?

31

Der Grund, warum ich das frage, ist, dass ein PHP-Skript keine Route ist. Wenn Sie beispielsweise eine article.php haben, lautet Ihre Route einfach http://mysite.com/article.php .

Warum das Konzept einer Route weiter abstrahieren, wenn es bereits als einfache Datei existiert?

Ryan
quelle

Antworten:

44

Um zu verstehen, was ein Router tut, müssen Sie zunächst verstehen, was eine Rewrite-Engine ist. Aus dem Wikipedia-Artikel (Schwerpunkt meiner):

Eine Rewrite-Engine ist eine Software, die das Erscheinungsbild einer Web-URL ändert (URL-Rewriting). Umgeschriebene URLs (manchmal auch als kurze, schicke URLs oder suchmaschinenfreundliche URLs bezeichnet) werden verwendet, um kürzere und relevanter aussehende Links zu Webseiten bereitzustellen. Die Technik fügt einen Grad an Trennung zwischen den Dateien, die zum Generieren einer Webseite verwendet werden, und der URL hinzu, die der Welt präsentiert wird .

Bei Verwendung einer Rewrite-Engine besteht keine 1: 1-Korrelation zwischen der URL und einem PHP-Skript. Ein Beispiel aus demselben Artikel:

http://example.com/wiki/index.php?title=Page_title

kann umgeschrieben werden als:

http://example.com/wiki/Page_title

Es gibt verschiedene Vorteile , die Technik zu verwenden. Da PHP normalerweise eng mit Apache gekoppelt ist, ist die am häufigsten verwendete Umschreibe-Engine das mod_rewrite von Apache .

Wenn Sie URLs umschreiben möchten, benötigen Sie eine Art Routing, da beim Routing die URL in Komponenten aufgeteilt und das eigentliche Skript ausgewählt wird. Die Dokumentationsseite für den Standard-Router des Zend Framework erklärt den Vorgang wie folgt:

Beim Routing wird ein URI-Endpunkt (der Teil des URI, der nach der Basis-URL steht) in Parameter zerlegt, um zu bestimmen, welches Modul, welcher Controller und welche Aktion dieses Controllers die Anforderung erhalten soll.

Die meisten PHP-Frameworks basieren heutzutage auf dem MVC-Pattern , und auf einem MVC-Framework sieht der Prozess ungefähr so ​​aus * :

  1. Der Browser zeigt auf eine URL,
  2. Der Webserver fängt die Anforderung ab und leitet sie an einen gemeinsamen Einstiegspunkt weiter, in der Regel ein index.phpSkript.
  3. index.php Ruft die URL ab und startet den Routing-Prozess.
  4. URL wird in Parameter zerlegt, wobei der erste die Steuerung ist, der zweite die Aktionsmethode ist und der Rest als dynamische Parameter betrachtet wird.
  5. Wenn eine mit dem ersten Parameter übereinstimmende Controller-Klasse vorhanden ist, wird ein Controller-Objekt instanziiert.
  6. Die Aktionsmethode, die normalerweise eine Funktion des Controller-Objekts ist, wird aufgerufen und ihre Rückgabe entspricht der tatsächlichen Rückgabe an den Browser.

Das Anpassen von Parametern an Steuerungen und Methoden verwendet normalerweise das Anpassen über reguläre Ausdrücke , um komplexe und dynamische Routing-Muster, sogenannte Routen, verarbeiten zu können. Gute Beispiele für Routen finden Sie auf der Dokumentationsseite zum URI-Routing CodeIgniter :

$ route ['journals'] = "Blogs";

$ route ['blog / joe'] = "blogs / users / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

Das $routeArray enthält die Muster als Schlüssel und die daraus resultierenden Aktionen als Werte im controller/action_method/dynamic_parameterFormat.

* Dies ist keine Beschreibung des kanonischen Prozesses, sondern nur eine vereinfachte Erklärung.

yannis
quelle
15
Es sollte ein Abzeichen für die Beschreibung eines MVC-Routers ohne Ableitung von "dispatch" geben ...
yannis