Heim > Artikel > Backend-Entwicklung > Wie funktioniert der Router im PHP-MVC-Framework (mit Code)
Dieser Artikel bringt Ihnen einen Artikel über die Funktionsweise des Routers im PHP-MVC-Framework (mit Code). Der Inhalt ist sehr gut. Ich hoffe, er kann jedem helfen.
Hinweis: Es scheint ein Fehler in der SF-Übersetzungskategorie vorzuliegen, daher wird dieser Artikel in der Originalkategorie angezeigt.
MVC Router oder Dispatcher erkennt die URL der HTTP-Anfrage und versucht, eine einzelne URL-Komponente mit dem Controller und der im Controller definierten Methode abzugleichen, während alle Parameter an die Methode übergeben werden.
Im Folgenden wird eine einfache Router-Klasse angegeben, um grob zu veranschaulichen, wie ein Router funktioniert. Allerdings ist der Router in einem realen Projekt deutlich komplexer als der Beispiel-Router unten, da er mehr Dinge bewältigen muss. Die Klasse
<?php class SimpleRouter { // 路由数组,存储我们定义的路由 private $routes; // 这个方法用于将定义的路由加入到 $routes 数组 function add_route($route, callback $closure) { $this->routes[$route] = $closure; } // 执行特定的路由 function execute() { $path = $_SERVER['PATH_INFO']; /** * 检测给定路由是否被定义, * 或者执行默认的 '/' 首页路由。 */ if (array_key_exists($path, $this->route)) { $this->route[$path](); } else { $this->route['/](); } } }
SimpleRouter ist ein vereinfachtes Modell eines MVC-Routers. Seine Hauptfunktion besteht darin, jede benutzerdefinierte Route zu einem Array hinzuzufügen und auszuführen. Um zu verstehen, wie es funktioniert, kopieren Sie den folgenden Code in die Datei index.php.
<?php // index.php class SimpleRouter { // 路由数组,存储我们定义的路由 private $routes; // 这个方法用于将定义的路由加入到 $routes 数组 function add_route($route, callback $closure) { $this->routes[$route] = $closure; } // 执行特定的路由 function execute() { $path = $_SERVER['PATH_INFO']; /** * 检测给定路由是否被定义, * 或者执行默认的 '/' 首页路由。 */ if (array_key_exists($path, $this->route)) { $this->route[$path](); } else { $this->route['/](); } } } /* 创建 Router 实例 */ $router = new SimpleRouter(); /* 添加首页闭包值路由器 */ $router->add_route('/', function(){ echo 'Hello World'; }); /* 添加另一个闭包路由 */ $router->add_route('/greetings', function(){ echo 'Greetings, my fellow men.'; }); /* 添加可回调函数作为路由 */ $router->add_route('/callback', 'myFunction'); /* 回调函数处理程序 */ function myFunction(){ echo "This is a callback function named '" . __FUNCTION__ ."'"; } /* 执行路由 */ $router->execute();
Gehen Sie nun zu Ihrem Browser und besuchen Sie die folgenden URLs:
http://localhost/index.php/ http://localhost/index.php/greetings http://localhost/index.php/callback
Für jede URL sollte eine andere in unserer Route definierte Nachricht angezeigt werden. Wie funktioniert der Router?
In unserem Beispiel fügt die Methode add_route den Pfadnamen (Route) der URL zum Routenarray hinzu und definiert den entsprechenden Verarbeitungsvorgang. Dieser Verarbeitungsvorgang kann eine einfache Funktion oder eine Rückruffunktion sein, die als Abschluss übergeben wird. Wenn wir nun die Methode execute des Routers ausführen, erkennt dieser, ob eine Route im aktuellen Array $routes übereinstimmt, und führt in diesem Fall diese Funktion oder Rückruffunktion aus.
Wenn Sie var_dump das Array $routes verwenden, können Sie den spezifischen Inhalt des Arrays sehen. Zu jeder definierten Route wird eine zugehörige Schließung gespeichert.
array (size=3) '/' => object(Closure)[2] '/greetings' => object(Closure)[3] '/callback' => string 'myFunction' (length=10)
Die Ausführungsverarbeitung wird durch die folgenden Zeilen abgeschlossen. Die Anweisung $this->routes[$path]** gibt einen Abschluss zurück, der im Array **$routes gespeichert wird und zur Angabe der Ausführung der Route verwendet wird das Ende der Aussage. 🎜>().
$this->routes[$path](); // 或 $this->routes['/']();Das obige Beispiel zeigt lediglich, wie der Router funktioniert. Der Einfachheit halber behandeln wir keine Fehler und berücksichtigen keine Routing-Sicherheitsprobleme. Verwandte Empfehlungen:
PHP-MVC-Framework-Routing-Studiennotizen, MVC-Framework-Routing-Studiennotizen
Das obige ist der detaillierte Inhalt vonWie funktioniert der Router im PHP-MVC-Framework (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!