Phroute ist ein interessantes Paket: Es ist ein schneller regelmäßiger, expressionsbasierter Router, den Sie problemlos in kleinen bis mittleren Projekten implementieren können. Es ist jedoch nicht nur sehr schnell: Es gibt Filter, Filtergruppen und benannte Routen. Sie können auch ein grundlegendes Controller -System verwenden, wenn die Dinge größer werden.
, dass wir heute sehen werden, wie man es benutzt und wie man seine Funktionen in einem Beispielprojekt implementiert. Außerdem werden wir sehen, was sich unter der Motorhaube befindet: Phroute ist ein Ergebnis vieler Experimente und Tests verschiedener Personen.
Beginnen wir mit der Installation!
Key Takeaways
- Phroute ist ein hocheffizientes, Regex-basiertes Routing-Paket ideal für kleine bis mittlere PHP Die Installation von Phroute ist mit Komponisten unkompliziert, was die Geschwindigkeit und Einfachheit der Projekteinrichtung verbessert.
- Phroute unterstützt eine Vielzahl von HTTP -Methoden und ermöglicht dynamische Routing mit optionalen Parametern, wodurch es für die API -Entwicklung und andere Webanwendungen vielseitig vielseitig ist.
- Filter in Phroute können vor oder nach der Routenbehandlung angewendet werden, wobei ein leistungsstarkes Tool für die Zugriffskontrolle und die Datenvalidierung sowie die Verbesserung der Sicherheits- und Datenintegrität bereitgestellt werden.
- Während Phroute sich in der Routing -Leistung auszeichnet und einige andere Router wie die von Laravel erheblich übertroffen hat, fehlt es derzeit an fortgeschrittenen Controller -Funktionen und umfassenden Dokumentationen, Bereichen, die für die zukünftige Verbesserung identifiziert wurden.
Sie können Ihrem Projekt in Sekundenschnelle Phroute zu Ihrem Projekt hinzufügen. Fügen Sie diese Zeile einfach Ihrer Datei composer.json hinzu:
{ "require": { "phroute/phroute": "1.*" } }Geben Sie den Befehl composer install ein und Sie sind in. Jetzt gehen wir zu unserem Testprojekt.
Beispielprojekt und erstes Beispiel
Für ein besseres Verständnis jedes Konzepts von Phroute ist es eine gute Idee, ein Beispielprojekt zum Arbeiten zu haben. Heute werden wir eine grundlegende API für einen Bücherdatenbankdienst erstellen.
Hier ist das Datenbankschema, das wir verwenden werden:
<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO authors (id, name) </span> <span>VALUES </span> <span>(1, 'Dan Brown'), </span> <span>(2, 'Paulo Coelho'); </span> <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO categories (id, name) </span> <span>VALUES </span> <span>(1, 'Thriller'), </span> <span>(2, 'Novel'); </span> <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT, title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL, pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7; </span> <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) </span> <span>VALUES </span> <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), </span> <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), </span> <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), </span> <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), </span> <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), </span> <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>Wir werden nichts wirklich Komplexes schreiben. Tatsächlich reicht es aus, einige Routen zu schreiben, um eine API -Anfrage auf sehr grundlegende Weise zu emulieren. Wenn Sie eine reale API schreiben möchten, müssen Sie viele Konzepte wissen, aber heute werfen wir nur einen Blick auf Phroute.
Bevor wir mit bestimmten Routen beginnen, analysieren wir die Hauptanwendungsstruktur. Das werden wir in unsere Index.php -Datei einfügen.
<span><span><?php </span></span><span> </span><span> <span>require 'vendor/autoload.php'; </span></span><span> </span><span> <span>function processInput($uri){ </span></span><span> <span>$uri = implode('/', </span></span><span> <span>array_slice( </span></span><span> <span>explode('/', $_SERVER['REQUEST_URI']), 3)); </span></span><span> </span><span> <span>return $uri; </span></span><span> <span>} </span></span><span> </span><span> <span>function processOutput($response){ </span></span><span> <span>echo json_encode($response); </span></span><span> <span>} </span></span><span> </span><span> <span>function getPDOInstance(){ </span></span><span> <span>return new PDO('mysql:host=localhost;dbname=booksapi;charset=utf8', 'root', ''); </span></span><span> <span>} </span></span><span> </span><span> <span>$router = new Phroute<span>\RouteCollector</span>(new Phroute<span>\RouteParser</span>); </span></span><span> </span><span> <span>$router->get('hello', function(){ </span></span><span> <span>return 'Hello, PHRoute!'; </span></span><span> <span>}); </span></span><span> </span><span> <span>$dispatcher = new Phroute<span>\Dispatcher</span>(router); </span></span><span> </span><span> <span>try { </span></span><span> </span><span> <span>$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], processInput($_SERVER['REQUEST_URI'])); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpRouteNotFoundException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpMethodNotAllowedException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} </span></span><span> </span><span> <span>processOutput($response);</span></span></span>Wir haben drei Dienstprogrammmethoden: ProcessInput, ProcessOutput und GetPdoInstance. Wir werden die ersten beiden verwenden, um sicherzugehen, dass wir die richtige Eingabe und die richtige Ausgabe erhalten. Der dritte wird die erforderliche PDO -Instanz vorbereiten.
HINWEIS: Der zweite Parameter der Array_Slice -Methode ist aufgrund meines persönlichen spezifischen Projekts "3". Ändern Sie es, wenn sich Ihre Basis -URL ändert.
Danach deklarieren wir unsere Routen mit dem Objekt $ router, Instanz der RouteController -Klasse. Anschließend erfolgt die Magie in der Methode $ dispatcher-> cispatch (), die zwei Parameter annimmt: die $ _server-Anforderungsmethode (GET, Post usw.) und die spezifische URI. Mit diesen Informationen ruft der Dispatcher die richtige Route auf und führt den Code in der Schließung aus. Der Rückgabewert wird in der $ -Antwortvariablen gespeichert, die dem Methode ProcessOutput () angegeben wird, der ihn als JSON -Zeichenfolge wiederholt.
Wie Sie sehen können, haben wir in diesem speziellen Beispiel eine einzige Route deklariert: Hallo.
Hinweis: Wenn Sie möchten, können Sie jedoch die tatsächliche Struktur verbessern. Erstellen Sie eine neue Datei und rufen Sie es Routes.php auf. Fügen Sie es dann direkt nach der Initialisierung von $ Router in der Datei "Main Index.php" hinzu: Sie haben alle Ihre Routen in einer separaten Datei. Meiner Meinung nach eine elegantere Lösung.
Das heißt, Sie wissen jetzt alles, was Sie über die Grundstruktur unseres Beispiels brauchen.
Lassen Sie uns unsere ersten Routen machen!
Routen
Eine einfache Route
Ok, mal sehen, was wir mit Routen machen können und wie viel wir sie für unsere Bedürfnisse anpassen können.
Wir beginnen mit der einfachsten Sache: Die Autorenliste.
{ "require": { "phroute/phroute": "1.*" } }
In der ersten Zeile deklarieren wir unseren Routennamen, Autoren.
testen wir die Route: Dies ist das Ergebnis.
<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO authors (id, name) </span> <span>VALUES </span> <span>(1, 'Dan Brown'), </span> <span>(2, 'Paulo Coelho'); </span> <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO categories (id, name) </span> <span>VALUES </span> <span>(1, 'Thriller'), </span> <span>(2, 'Novel'); </span> <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT, title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL, pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7; </span> <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) </span> <span>VALUES </span> <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), </span> <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), </span> <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), </span> <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), </span> <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), </span> <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>
toll!
Hinzufügen eines Parameters
Jetzt können wir einen Schritt nach vorne machen: Was ist mit dem Hinzufügen eines Parameters, um die Details eines einzelnen Autors angesichts der ID zu erhalten?
so etwas:
<span><span><?php </span></span><span> </span><span> <span>require 'vendor/autoload.php'; </span></span><span> </span><span> <span>function processInput($uri){ </span></span><span> <span>$uri = implode('/', </span></span><span> <span>array_slice( </span></span><span> <span>explode('/', $_SERVER['REQUEST_URI']), 3)); </span></span><span> </span><span> <span>return $uri; </span></span><span> <span>} </span></span><span> </span><span> <span>function processOutput($response){ </span></span><span> <span>echo json_encode($response); </span></span><span> <span>} </span></span><span> </span><span> <span>function getPDOInstance(){ </span></span><span> <span>return new PDO('mysql:host=localhost;dbname=booksapi;charset=utf8', 'root', ''); </span></span><span> <span>} </span></span><span> </span><span> <span>$router = new Phroute<span>\RouteCollector</span>(new Phroute<span>\RouteParser</span>); </span></span><span> </span><span> <span>$router->get('hello', function(){ </span></span><span> <span>return 'Hello, PHRoute!'; </span></span><span> <span>}); </span></span><span> </span><span> <span>$dispatcher = new Phroute<span>\Dispatcher</span>(router); </span></span><span> </span><span> <span>try { </span></span><span> </span><span> <span>$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], processInput($_SERVER['REQUEST_URI'])); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpRouteNotFoundException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpMethodNotAllowedException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} </span></span><span> </span><span> <span>processOutput($response);</span></span></span>
Sie können einen Parameter mit einem Platzhalter {variable_name} mit demselben ausgewählten Namen als Parameter für den Verschluss übergeben. In diesem Beispiel haben wir einen {ID} -Plampenhalter, der dem Parameter $ ID entspricht. Sie können jeden gewünschten Parameter angeben: keine Grenzen.
Manchmal kann ein Parameter optional sein. Lassen Sie uns ein anderes Beispiel erstellen: Wenn wir die Books -URL verwenden, möchten wir eine Liste aller Datenbankbücher abrufen. Wenn wir jedoch eine ID wie Bücher angeben/1, erhalten wir die Bücherliste der angegebenen Kategorie.
Hier gehen wir:
<span>$router->get('authors', function(){ </span> <span>$db = getPDOInstance(); </span> <span>$sql = 'SELECT * FROM authors;'; </span> <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY)); </span> <span>$st->execute(); </span> <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS); </span> <span>return $result; </span> <span>});</span>
Hinzufügen eines "?" Nach dem Parameter -Platzhalter bedeutet dies optional. Natürlich ist es eine gute Idee, einen Standardwert in der Schließungserklärung anzugeben.
Verwenden verschiedener Verben
Bis jetzt haben wir nur Routen erhalten. Was ist mit anderen HTTP -Verben?
Kein Problem. Schauen Sie sich hier an:
[{"id":"1","name":"Dan Brown"},{"id":"2","name":"Paulo Coelho"}]
Erstellen wir eine Beispiel -Postroute. Es ist Zeit, unserer Sammlung ein neues Buch hinzuzufügen!
<span>$router->get('author/{id}', function($id){ </span> <span>$db = getPDOInstance(); </span> <span>$sql = 'SELECT * FROM `authors` WHERE `id` = :id'; </span> <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY)); </span> <span>$st->execute(array(':id' => $id)); </span> <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS); </span> <span>return $result; </span> <span>});</span>
Stellen wir uns vor, wir haben ein Formular zum Ausfüllen mit Buchdaten: Das Aktionsattribut zeigt auf die Buchstraße, die wir gerade erstellt haben!
Jetzt werden wir einen weiteren Schritt nach vorne machen: Es ist Zeit, unsere Routen zu schützen!
filter
Tatsächlich kann jeder, der in die Buchstabelle eintritt, ein neues Buch in unsere Sammlung einfügen. Das ist cool, aber das ist nicht so, als würde Dinge normalerweise laufen. Was ist, wenn wir unsere Routen schützen wollen? Filter sind das, was wir brauchen.
Filter sind den Routen sehr ähnlich: Sie haben einen Namen und einen zugeordneten Verschluss, der ausgeführt wird, wenn der Filter irgendwo aufgerufen wird.
Also, was ist der Unterschied? Ein Filter kann leicht vor (oder nach) eine Route aufgerufen werden.
filter
machen wir ein Beispiel:
{ "require": { "phroute/phroute": "1.*" } }
Zuallererst haben wir den Filter mit der Filter () -Methode des $ Router -Objekts deklariert. Die Syntax ist die gleiche wie bei einer Route. Wir geben ihm einen Namen und eine Schließung, die zum richtigen Zeitpunkt ausgeführt wird.
ok, aber was ist die "richtige Zeit"?
Wir entscheiden uns jetzt dafür: Wir haben der Post () -Methode gerade einen dritten Parameter hinzugefügt. Dieser dritte Parameter ist ein Array, in dem wir den Schlüssel zuvor mit dem Namen des Filters (loggled_in) angeben. Von diesem Moment an, vor jedem einzelnen Anruf in die Buchstraße, wird der Logged_in -Filter (und die Ausführung des Schließungsinhalts) ebenfalls genannt.
In diesem speziellen Fall prüfen wir eine Sitzungsvariable user_id, um festzustellen, ob der Benutzer angemeldet ist.
Es gibt auch den After -Schlüssel, mit dem ein Filter direkt nach dem Routenanruf ausgeführt wird. Hier ist ein Beispiel.
<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO authors (id, name) </span> <span>VALUES </span> <span>(1, 'Dan Brown'), </span> <span>(2, 'Paulo Coelho'); </span> <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; </span> <span>INSERT INTO categories (id, name) </span> <span>VALUES </span> <span>(1, 'Thriller'), </span> <span>(2, 'Novel'); </span> <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT, title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL, pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7; </span> <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) </span> <span>VALUES </span> <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), </span> <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), </span> <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), </span> <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), </span> <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), </span> <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>
Wenn Sie benötigen, können Sie auch gleichzeitig mehr als einen Filter angeben.
Alles, was Sie tun müssen, ist eine Reihe von Zeichenfolgen anstelle einer einzigen Zeichenfolge zu verwenden.
<span><span><?php </span></span><span> </span><span> <span>require 'vendor/autoload.php'; </span></span><span> </span><span> <span>function processInput($uri){ </span></span><span> <span>$uri = implode('/', </span></span><span> <span>array_slice( </span></span><span> <span>explode('/', $_SERVER['REQUEST_URI']), 3)); </span></span><span> </span><span> <span>return $uri; </span></span><span> <span>} </span></span><span> </span><span> <span>function processOutput($response){ </span></span><span> <span>echo json_encode($response); </span></span><span> <span>} </span></span><span> </span><span> <span>function getPDOInstance(){ </span></span><span> <span>return new PDO('mysql:host=localhost;dbname=booksapi;charset=utf8', 'root', ''); </span></span><span> <span>} </span></span><span> </span><span> <span>$router = new Phroute<span>\RouteCollector</span>(new Phroute<span>\RouteParser</span>); </span></span><span> </span><span> <span>$router->get('hello', function(){ </span></span><span> <span>return 'Hello, PHRoute!'; </span></span><span> <span>}); </span></span><span> </span><span> <span>$dispatcher = new Phroute<span>\Dispatcher</span>(router); </span></span><span> </span><span> <span>try { </span></span><span> </span><span> <span>$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], processInput($_SERVER['REQUEST_URI'])); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpRouteNotFoundException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} catch (Phroute<span>\Exception\HttpMethodNotAllowedException</span> $e) { </span></span><span> </span><span> <span>var_dump($e); </span></span><span> <span>die(); </span></span><span> </span><span> <span>} </span></span><span> </span><span> <span>processOutput($response);</span></span></span>
Filtergruppen
Stellen wir uns einen Fall in der realen Welt vor: Nehmen wir an, wir haben drei Postrouten, eine für jedes Unternehmen (Autor, Buch, Kategorie). Es wäre langweilig, drei verschiedene Zeiten des protokollierten Filters hinzuzufügen.
Mach dir keine Sorgen: Filtergruppen sind hier, um zu helfen.
<span>$router->get('authors', function(){ </span> <span>$db = getPDOInstance(); </span> <span>$sql = 'SELECT * FROM authors;'; </span> <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY)); </span> <span>$st->execute(); </span> <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS); </span> <span>return $result; </span> <span>});</span>
Mit dieser einzelnen Gruppe haben wir denselben Filter für drei verschiedene Routen definiert.
HINWEIS: Wenn Sie benötigen, können Sie so oft in anderen Gruppen in anderen Gruppen nisten.
Projekt wachsen? Zeit für die Verwendung von Controllern!
Unser Projekt wächst auf und organisiert unsere Codebasis in einer einzelnen Datei wirklich schwer und schlampig. Was ist mit Controllern?
Ja: Phroute handelt nicht nur um Routen. Wenn die Dinge wild werden, ist es Zeit, sie zu organisieren.
Lassen Sie uns zuerst sehen, wie die Struktur eines Controllers ist. Schauen Sie sich dieses Beispiel an (wir können es in unsere Routen.Php -Datei einfügen):
[{"id":"1","name":"Dan Brown"},{"id":"2","name":"Paulo Coelho"}]
Wir haben eine Autorenklasse erstellt. In dieser Klasse setzen wir zwei Methoden ein: getIndex () und postadd ().
Dann verknüpfen wir mit der CONTROLLER () -Methode des $ Router -Objekts die Autoren -URL mit der Autorenklasse. Wenn wir also den URL -Autor in unserem Browser eingeben, wird die GetIndex () -Methode automatisch aufgerufen. Gleiches gilt für die PostAdd () -Methode, die an den Autor/add (post) url gebunden ist.
Diese automatische Auflösungsname -Funktion ist sehr interessant, aber eigentlich nicht genug.
Der Controller -Teil befindet sich in einem frühen Stadium der Entwicklung und braucht viele Verbesserungen. Eine davon ist die Möglichkeit, Parameter für Controller -Methoden zu definieren. Oder vielleicht eine einfache Möglichkeit, Filter für einige Methoden eines Controllers zu definieren (und nicht „alles oder nichts“).
Schlussfolgerung
Es gibt noch viel Arbeit, insbesondere auf der Controller -Seite. Als Entwickler denke ich, dass es großartig wäre, eine generische grundlegende Controller -Klasse zu haben, um alle schmutzigen Arbeiten zu erledigen (mit Filtern, Methodenparametern usw.). Es gibt auch mangelnde Dokumentation.
Andererseits kommt Phroute mit einem sehr schnellen Router. Auf der GitHub -Seite des Projekts sehen Sie einige Statistiken über einen Vergleich mit dem Kernrouter von Laravel: Die Ergebnisse sind erstaunlich. Im schlimmsten Fall ist Phroute ungefähr vierzig (ja, 40) Mal schneller.
Wenn Sie bestimmte Details über den „Engine“ hinter diesem Router kennen möchten, können Sie die Nikic -Seite auf Github besuchen, wo er alle mit Tests, Benchmarks und verwandten Ergebnissen erklärte.
Wirst du Phroute probieren? Lassen Sie mich wissen, was Sie darüber denken!
häufig gestellte Fragen (FAQs) zum schnellen PHP -Routing mit Phroute
Was ist Phroute und warum ist es für das PHP -Routing wichtig? Es ist wichtig beim PHP -Routing, da es eine einfache und bequeme Möglichkeit bietet, Routen in Ihrer PHP -Anwendung zu definieren. Mit Phroute können Sie URLs in bestimmten Funktionen oder Methoden in Ihrer Anwendung zuordnen, sodass Sie den Code einfacher verwalten und organisieren können. Es unterstützt auch Routenparameter und Filter und gibt Ihnen mehr Kontrolle darüber, wie Ihre Anwendung auf verschiedene URLs reagiert.
Wie installiere ich Phroute in meiner PHP -Anwendung? PHP -Anwendung mit Composer, einem Abhängigkeitsmanagement -Tool für PHP. Sie können den Komponisten installieren, indem Sie die Anweisungen auf der offiziellen Website befolgen. Sobald Sie den Komponisten installiert haben, können Sie Phroute installieren, indem Sie den folgenden Befehl in Ihrem Terminal ausführen: Composer benötigt Phroute/Phroute. Dadurch wird Phroute in Ihrer Anwendung heruntergeladen und installiert.
Wie definiere ich Routen mit Phroute? Sie müssen zunächst eine Instanz der PhrouterouteCollector -Klasse erstellen. Sie können dann die Routenmethode dieser Klasse verwenden, um Ihre Routen zu definieren. Die Routenmethode erfordert drei Parameter: die HTTP -Methode (get, post usw.), das URL -Muster und die Handler -Funktion oder -methode. Hier ist ein Beispiel:
$ router = new phrouterouteCollector (); "Benutzer -ID: $ id";
})
Wie behandle ich Routenparameter mit Phroute?
Routenparameter sind Teile der URL, die variieren können. In Phroute können Sie Routenparameter definieren, indem Sie diese in das URL -Muster aufnehmen, wenn Sie Ihre Routen definieren. Routenparameter sind in lockigen Klammern eingeschlossen {}. Wenn eine Route übereinstimmt, werden die Werte der Routenparameter als Argumente an die Handler -Funktion oder -methode übergeben. Hier ist ein Beispiel:
$ router = new phrouterouteCollector (); "Benutzer -ID: $ id";
});
Wie verwende ich Filter mit Phroute? Phroute sind Funktionen oder Methoden, die vor oder nach einer Route ausgeführt werden. Sie können verwendet werden, um Aufgaben wie Authentifizierung oder Eingabevalidierung auszuführen. Sie können Filter mithilfe der Filtermethode der PhrouterouteCollector -Klasse definieren und sie mit den Vor- und Nachher -Methoden auf Routen anwenden. Hier ist ein Beispiel:
$ router = new PhrouterouteCollector (); )) {
return false;}
}); ['DashboardController', 'show'])-> vor ('auth'); Dies tritt auf, wenn keine Route mit der angeforderten URL übereinstimmt. Sie können einen 404 -Handler mit der Notfundmethode der PhrouterouteCollector -Klasse definieren. Der 404 -Handler ist eine Funktion oder Methode, die auftritt, wenn ein 404 -Fehler auftritt. Hier ist ein Beispiel:
$ router = new PhrouterouteCollector (); 🎜>
Wie versende ich Routen mit Phroute? PHROUTEROUTEDISPATCHER -KLASSE. Die Versandmethode dieser Klasse nimmt die HTTP -Methode und die URL als Parameter an und gibt das Ergebnis der Handler -Funktion oder -methode der übereinstimmenden Route zurück. Hier ist ein Beispiel:
$ dispatcher = new phrouteroutedispatcher ($ router-> getData ());
$ response = $ dispatcher-> Dispatch ($ _ Server ['Request_Method'], $ _server ['Request_uri ']); Frameworks?
Wie debugge ich Routen in Phroute? Diese Methode gibt ein Array aller definierten Routen zurück, was für Debugging -Zwecke nützlich sein kann. Hier ist ein Beispiel:
$ router = new phrouterouteCollector (); "Benutzer-ID: $ id";
});
print_r ($ router-> debug ()); Ausnahmen in Phroute? Wenn während des Versandvorgangs eine Ausnahme ausgelöst wird, können Sie sie fangen und angemessen umgehen. Hier ist ein Beispiel:
Versuchen $ _Server ['request_uri']); {
echo 'Es ist ein Fehler aufgetreten:'. $ e-> getMessage ();
}
Das obige ist der detaillierte Inhalt vonSchnelles PHP -Routing mit Phroute. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Alipay PHP ...

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),