PHPフレームワークでは、なぜ「ルート」の概念が使用されるのですか?


31

これを尋ねる理由は、PHPスクリプトがルートではないからです。たとえば、article.phpがある場合、ルートは単純にhttp://mysite.com/article.phpになります。

単純なファイルとして既に存在するルートの概念をさらに抽象化するのはなぜですか?

回答:


44

ルーターの機能を理解するには、最初に書き換えエンジンとは何かを理解する必要があります。ウィキペディアの記事から(強調鉱山):

書き換えエンジンは、Web URLの外観を変更するソフトウェアです(URL書き換え)。書き換えられたURL(短い、派手なURL、または検索エンジンフレンドリー-SEFとも呼ばれます)は、Webページへのより短く関連性の高いリンクを提供するために使用されます。この手法により、Webページの生成に使用されるファイルと、Worldに表示されるURLの間にある程度の分離が追加されます

書き換えエンジンを使用する場合、URLとPHPスクリプトの間に1対1の相関関係はありません。同じ記事の例:

http://example.com/wiki/index.php?title=Page_title

次のように書き換えることができます。

http://example.com/wiki/Page_title

この手法を使用することには、さまざまな利点があります。PHPは通常Apacheと緊密に結合されているため、最も一般的に使用される書き換えエンジンはApacheのmod_rewriteです。

書き換えられたURLが必要な場合、ルーティングはURLを取得し、コンポーネントに分割し、呼び出す実際のスクリプトを決定するプロセスであるため、何らかのルーティングが必要です。Zend Frameworkの標準ルータードキュメントページでは、プロセスを次のように説明しています。

ルーティングとは、URIエンドポイント(ベースURLの後に来るURIの一部)を取得し、それをパラメーターに分解して、そのモジュール、コントローラー、およびそのコントローラーのアクションがリクエストを受信するかを決定するプロセスです。

最近のほとんどのPHPフレームワークはMVCパターンに基づいており、MVCフレームワークではプロセスは次のようになります*

  1. ブラウザはURLを指し示し、
  2. Webサーバーはリクエストをキャッチし、一般的なエントリポイント(通常はindex.phpスクリプト)に転送します。
  3. index.php URLを取得し、ルーティングプロセスを開始します。
  4. URLはパラメーターに分解されます。1つ目はコントローラー、2つ目はアクションメソッド、残りは動的パラメーターと見なされます。
  5. 最初のパラメーターに一致するコントローラークラスが存在する場合、コントローラーオブジェクトがインスタンス化され、
  6. 通常はコントローラーオブジェクトの関数であるアクションメソッドが呼び出され、その戻り値が実際にブラウザーに返されます。

パラメーターをコントローラーおよびメソッドに一致させるには、通常、正規表現による一致を使用して、ルートとして知られる複雑で動的なルーティングパターンを処理できるようにします。ルートの良い例は、CodeIgniterのURI Routingドキュメントページにあります

$ route ['journals'] = "blogs";

$ route ['blog / joe'] = "blogs / users / 34";

$ route ['product /(:any)'] = "catalog / product_lookup";

$ route ['product /(:num)'] = "catalog / product_lookup_by_id / $ 1";

$routeアレイは、キーとの値として得られたアクションとしてパターンを保持しているcontroller/action_method/dynamic_parameterフォーマット。

*これは、正規化プロセスの説明ではなく、単純化した説明として意図されています。


15
...「派遣」のいずれかの誘導体を用いずに、MVCルータを記述するためのバッジがあるはず
ヤニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.