Bei der Entwicklung von Webanwendungen besteht die Funktion des Routing -Systems darin, die vom Benutzer angeforderte URL in den entsprechenden Controller und Methode zu analysieren. Obwohl moderne Frameworks (wie Laravel und Symfony) integrierte leistungsstarke Routing-Systeme in der leichten Projekt- oder Lernphase integriert sind, können wir auch die Parse_url -Funktion verwenden, die mit PHP ein einfacher Routing-Verteilungsmechanismus implementiert.
In diesem Artikel wird vorgestellt, wie Sie Parse_url und einige String -Verarbeitungsfunktionen verwenden, um ein einfaches System zur Auflösung von URL -Routing zu erstellen.
Parse_url ist eine integrierte Funktion in PHP, mit der URLs in Komponenten wie Schema, Host, Pfad, Abfrage usw. aufgeteilt werden. Beispiele sind wie folgt:
$url = 'https://gitbox.net/user/profile?id=42';
$parts = parse_url($url);
print_r($parts);
Ausgabe:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /user/profile
[query] => id=42
)
Wie aus der Ausgabe ersichtlich ist, kann Parse_url uns helfen, den Pfad und die Abfrage der URL genau zu erhalten. Dies ist der wichtigste Teil, den wir für die Implementierung der Routing -Auflösung benötigen.
Erstellen wir ein einfaches Routing -System, das URLs wie folgt unterstützt:
https://gitbox.net/controller/action/param1/param2
Wir hoffen, die entsprechende Methode gemäß den Namen des Controllers und der Aktion aufzurufen und nachfolgende Parameter zu übergeben.
Unter der Annahme, dass unsere PHP -Anwendung auf einem Server bereitgestellt wird, der URL -Umschreiben unterstützt, können wir den aktuellen Anforderungsweg über $ _server ['Request_uri'] erhalten:
$requestUri = $_SERVER['REQUEST_URI'];
$path = parse_url($requestUri, PHP_URL_PATH);
// Entfernen Sie den Anfang und Ende von Schrägstrichen,Und durch Schrägstrich geteilt
$segments = explode('/', trim($path, '/'));
$controller = !empty($segments[0]) ? ucfirst($segments[0]) . 'Controller' : 'HomeController';
$action = isset($segments[1]) ? $segments[1] : 'index';
$params = array_slice($segments, 2);
class UserController {
public function profile($id = null) {
echo "User profile page. ID: " . htmlspecialchars($id);
}
}
if (class_exists($controller)) {
$instance = new $controller();
if (method_exists($instance, $action)) {
call_user_func_array([$instance, $action], $params);
} else {
http_response_code(404);
echo "Die Methode existiert nicht:$action";
}
} else {
http_response_code(404);
echo "Der Controller existiert nicht:$controller";
}
Nehmen wir an, wir greifen auf die folgende Adresse zu:
https://gitbox.net/user/profile/42
Die analysierte Variable ist:
$controller = 'UserController';
$action = 'profile';
$params = ['42'];
Ausgabe:
User profile page. ID: 42
Durch die Kombination der Parse_url -Funktion mit Explore und CALL_USER_FUNC_Array können wir schnell einen leichten Routing -Verteilungsmechanismus mit sehr einfachem Code erstellen. Obwohl es den Anforderungen komplexer Anwendungen nicht erfüllen kann, ist es praktisch genug, um einfache API -Schnittstellen zu lernen und aufzubauen. In der anschließenden Entwicklung können regelmäßige Übereinstimmungen, Standardparameter, Fehlerbehandlungen und Namespace -Unterstützung weiter hinzugefügt werden, um das System perfekter zu machen.