Heim >Backend-Entwicklung >PHP-Tutorial >Schnelles PHP -Routing mit Phroute

Schnelles PHP -Routing mit Phroute

Lisa Kudrow
Lisa KudrowOriginal
2025-02-20 12:25:16137Durchsuche

Schnelles PHP -Routing mit Phroute

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.
installieren

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:

Schnelles PHP -Routing mit Phroute

Wenn Sie einige Tests durchführen möchten, ist dies der SQL -Schema -Dump, den ich verwendet habe (mit zusätzlichen Dummy -Daten).

<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>
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>

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>

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?

Ja, Sie können Phroute mit anderen PHP -Frameworks verwenden. Phroute ist eine eigenständige Bibliothek, was bedeutet, dass sie nicht von einem bestimmten Framework abhängt. Sie können es in jeder PHP -Anwendung verwenden, unabhängig vom von Ihnen verwendeten Framework. Möglicherweise müssen Sie jedoch Ihren Code anpassen, um mit dem Routing -System Ihres Frameworks zu arbeiten.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn