この記事では、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 フレームワークの Router はどのように機能しますか (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。