Wie funktioniert der Router im PHP-MVC-Framework (mit Code)

不言
Freigeben: 2023-04-03 14:04:01
Original
3481 Leute haben es durchsucht

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['/]();
        }
    }
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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['/']();
Nach dem Login kopieren
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

PHP-Lern-MVC-Framework-Route

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage