ホームページ  >  記事  >  バックエンド開発  >  php MVC フレームワークの Router はどのように機能しますか (コード付き)

php MVC フレームワークの Router はどのように機能しますか (コード付き)

不言
不言オリジナル
2018-08-01 11:10:163453ブラウズ

この記事では、php MVC フレームワークのルーター (Router) がどのように機能するかについての記事 (コード付き) を紹介します。内容は非常に優れています。困っている友人は参考にしてください。すべての人に役立つことを願っています。

注: SF翻訳カテゴリにバグがあるようなので、この記事はオリジナルカテゴリに掲載されています。

MVC ルーターまたはディスパッチャーは、HTTP リクエストの URL を検出し、すべてのパラメーターをメソッドに渡しながら、単一の URL コンポーネントをコントローラーおよびコントローラーで定義されたメソッドと照合しようとします。

ルーターがどのように動作するかを大まかに説明するために、簡単なルーター クラスを以下に示します。ただし、実際のプロジェクトでは、ルータはより多くのことを処理する必要があるため、以下の例のルータよりもはるかに複雑になります。

<?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 クラスは、MVC ルーターの簡略化されたモデルです。その主な機能は、ユーザー定義の各ルートを配列に追加して実行することです。その仕組みを理解するには、以下のコードを 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();

次に、ブラウザに移動して次の URL にアクセスします。

http://localhost/index.php/
http://localhost/index.php/greetings
http://localhost/index.php/callback

URL ごとに、ルートで定義された異なるメッセージが表示されるはずです。では、ルーターはどのように機能するのでしょうか?

この例では、add_route メソッドは、URL のパス名 (ルート) をルーティング配列に追加し、対応する処理操作を定義します。この処理操作は、クロージャとして渡される単純な関数またはコールバック関数にすることができます。ここで、ルーターの execute メソッドを実行すると、ルートが現在の $routes 配列内で一致するかどうかが検出され、一致する場合は、この関数またはコールバック関数が実行されます。

この $routes 配列 var_dump を使用すると、配列の特定の内容を確認できます。定義されたルートごとに、クロージャがそれに関連付けられて保存されます。

array (size=3)
  '/' => 
    object(Closure)[2]
  '/greetings' => 
    object(Closure)[3]
  '/callback' => string 'myFunction' (length=10)

以下の行で実行処理が完了します。 $this->routes[$path]** ステートメントはクロージャを返します。クロージャは **\$routes 配列に格納され、ルートの実行を指定するために使用されます。 #()

$this->routes[$path]();
// 或
$this->routes['/']();
上記の例は、ルーターの動作を単純に示しています。わかりやすくするために、エラーは処理せず、ルーティングのセキュリティ問題も考慮していません。

関連する推奨事項:

PHP MVC フレームワーク ルーティングの学習ノート、mvc フレームワーク ルーティングの学習ノート

#PHP 学習 MVC フレームワーク ルーティング# ##################################

以上がphp MVC フレームワークの Router はどのように機能しますか (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。