PHP ルーティング テクノロジの原理と実践

WBOY
リリース: 2016-07-30 13:30:59
オリジナル
1070 人が閲覧しました

0x00 ルーティング実装原則

ユーザーは、指定された URL パラダイムを通じてバックエンドにアクセスし、URL ルーティング処理クラスによる処理後、ロジック処理クラスに転送され、リクエスト結果がユーザーに返されます。

URL パラダイムとルールに同意する

検索エンジンに適し、ユーザーフレンドリーである、好みの URL ルールのセットに同意する

URL 処理クラス (つまり、ルーティング実装の中核)

解析して処理するユーザーが要求した URL、ユーザーが要求したクラス、メソッド、およびクエリ パラメーターを取得し、その要求を論理処理クラスに転送します。

ロジック処理クラス

は、Web サイトの実際のビジネス ロジックを処理します。

0x01 URL パラダイム規約

現在、一般的な URL 形式は 2 つあり、1 つは通常モード、もう 1 つは pathinfo モードです。 pathinfo 模式。

普通模式

ThinkPHP 框架中,默认的URL格式即为普通模式,普通模式URL如下:

<code>index.php?m=home&c=user&<span>a</span>=login&v=<span>value</span></code>
ログイン後にコピー

其中 m 参数的值为模块名称, c 参数的值为控制器名称, a 参数的值为方法名称,之后的参数则为该方法中所要接收的其他 GET 请求参数

pathinfo模式

CodeIgniter 框架中,默认的URL格式为 pathinfo 模式,如下:

<code><span>index</span>.php/controller/<span><span>method</span>/<span>prarme1</span>/<span>value1</span></span></code>
ログイン後にコピー

这块的意义也已经标注的很明白了,在 method 以后,就是方法接收的 GET 参数了,格式就是 名称/值

0x02 URL路由处理类(核心)

此处我们选用最简单的普通单模块模式进行演示,只为说明简单的原理,如下:

<code>index.php?c=user&<span>a</span>=login&v=<span>value</span></code>
ログイン後にコピー

我们约定参数 c 为控制器名称,参数 a 为方法名称,之后的均是 GET 参数

<code><span><span><?php</span><span>include</span><span>'index.class.php'</span>;
<span>include</span><span>'user.class.php'</span>;
<span>// 对用户请求URL进行处理</span><span>$query</span> = <span>$_GET</span>;
<span>$controller</span> = <span>isset</span>(<span>$query</span>[<span>'c'</span>]) ? <span>$query</span>[<span>'c'</span>] : <span>'indexController'</span>;
<span>$action</span> = <span>isset</span>(<span>$query</span>[<span>'a'</span>]) ? <span>$query</span>[<span>'a'</span>] : <span>'index'</span>;
<span>if</span> (class_exists(<span>$controller</span>)) {
    <span>if</span> (method_exists(<span>$controller</span>, <span>$action</span>)) {

        <span>unset</span>(<span>$_GET</span>[<span>'c'</span>]);
        <span>unset</span>(<span>$_GET</span>[<span>'a'</span>]);
        <span>// 实例化用户请求类并调用方法</span>
        (<span>new</span><span>$controller</span>())-><span>$action</span>();

    } <span>else</span> {
        <span>echo</span><span>'控制器'</span> . <span>$controller</span> . <span>'中不存在方法'</span> . <span>$action</span>;
    }
} <span>else</span> {
    <span>echo</span><span>'不存在控制器'</span> . <span>$controller</span>;
}</span></span></code>
ログイン後にコピー

其中 unset()

通常モード

ThinkPHP フレームワークでは、デフォルトの URL 形式は通常モードです。 通常モードの URL は次のとおりです:

<code><span>/* index.class.php 文件源码 */</span><span><?php</span><span><span>class</span><span>indexController</span> {</span><span>public</span><span><span>function</span><span>index</span><span>()</span>{</span>
        var_dump(<span>$_GET</span>);
    }
}</code>
ログイン後にコピー
ここで、m の値は次のとおりです。パラメータはモジュール名、c パラメータの値はコントローラ名、a パラメータの値はメソッド名、次のパラメータはその他の GETはメソッドで受信されます。 code> リクエスト パラメーター <p></p>pathinfo モード<p></p> <code>CodeIgniter フレームワークでは、デフォルトの URL 形式は pathinfo モードです。以下のように:
<code><span>/* user.class.php 文件源码 */</span><span><?php</span><span><span>class</span><span>user</span> {</span><span>public</span><span><span>function</span><span>index</span><span>()</span> {</span><span>echo</span><span>'这里是User控制器'</span>;
    }

    <span>public</span><span><span>function</span><span>login</span><span>()</span> {</span>
        var_dump(<span>$_GET</span>);
    }
}</code>
ログイン後にコピー

このブロックの意味もマークされています。 method の後には、メソッドによって受け取られる GET パラメーターが表示されます。 code>name/value



0x02 URL ルーティング処理クラス (コア) ここでは、次のように単純な原理を説明するために、デモ用に最も単純な通常の単一モジュール モードを選択します: rrreee

パラメータ c はコントローラの名前、パラメータ a はメソッド名、以下はすべて GET パラメータです

rrreee

unset() は、実際に呼び出されるメソッドに損傷を与えるだけで、2 つの get パラメータを削除します。

🎜0x03 ロジック処理クラス🎜🎜 ロジック処理クラスは、最終的なビジネス ロジックであり、実際にユーザーのリクエストに応答するコードの断片です。以下は単純な例です: 🎜rrreeerrreee🎜0x04 終了 🎜🎜これは最も単純な PHP ルーティング テクノロジの原理にすぎません。実際、プロジェクトまたはフレームワークのルーティングを真に開発するには、以下と互換性がある必要がある場合があります。多くの複雑な状況に対応できる必要があるため、すべてを考慮する必要があります。 🎜🎜🎜原作者:アーリャンです🎜 元のリンク: http://www.2liang.me/?p=230 🎜 再版には本文内にマークを付け、元のリンク、著者、その他の情報を保持する必要があります。 🎜🎜🎜 🎜 上記では、PHP ルーティング テクノロジの原理と実践を、その側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜 🎜 🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート