ホームページ > php教程 > PHP开发 > Yii フレームワーク分析 (8) - URL 管理コンポーネント

Yii フレームワーク分析 (8) - URL 管理コンポーネント

黄舟
リリース: 2016-12-27 11:25:30
オリジナル
1301 人が閲覧しました

URL 管理コンポーネントは主に 2 つの機能を提供します:
1. ユーザーが入力した URL に従って、このリクエストを処理するためのルート (どのコントローラーのどのアクションが処理するか) を解析し、同時にパラメーター部分を$_GET パラメータへの URL。すべての Web フレームワークでは、ルート配布作業を実行するためにこのようなコンポーネントが必要です。
2. ルートとパラメータ配列に基づいて URL を作成します。 URL はビュー レイヤでハードコーディングできます。つまり、URL アドレスを直接書き込むことができますが、これでは柔軟性に欠けることが多く、後のメンテナンスにコストがかかります。

array(
    'components'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            &#39;/art/<cate:\w+>/<key:\d+>/<id:\d+>/<p:\d+>&#39;=>&#39;article/<cate>/<key>&#39;,
            &#39;post/<id:\d+>/<title:.*?>&#39;=>&#39;post/view&#39;,
            &#39;<controller:\w+>/&#39;=>&#39;<controller>/&#39;,
         ),
    ),
);</action></controller></action:\w+></controller:\w+></title:.*?></id:\d+></key></cate></p:\d+></id:\d+></key:\d+></cate:\w+>
ログイン後にコピー

上記は URL 管理コンポーネントの構成で、合計 3 つのルールがあります。以下の図は、URL 解析と URL 作成の 2 つの機能を説明するために最初のルールを例にしています。 CUrlManager はルーティング ルールごとに、このルールに対応する 2 つの関数を処理する CUrlRule オブジェクトを作成します。そのため、ルールが複数ある場合は、複数の CUrlRule オブジェクトが存在します。したがって、CUrlRule は URL 管理の中核です。CUrlRule の動作原理を分析してみましょう。

Yii フレームワーク分析 (8) - URL 管理コンポーネント

各 URL ルーティング ルールは CUrlRule オブジェクトによって処理されます。次に、次のルーティング ルールを例として取り上げ、URL 解析と URL 作成を説明します。加工工程。各 CUrlRule オブジェクトによる URL の処理プロセスは、次の 3 つの段階に分けることができます。
1. CUrlRule オブジェクトの初期化
CUrlRule オブジェクトのコンストラクターで、6 つの重要なメンバー変数が初期化されます。

Yii フレームワーク分析 (8) - URL 管理コンポーネント

2. URL の解析
URL の解析は 3 つのステップに分かれています: a. パターン ルールに従って URL の各フィールドを解析します。 b. 参照に従ってルート内の参照フィールドを置き換えます。 c. params に指定されたフィールドを追加します。 _GET 配列
3. URL を作成します。 a. 入力ルートの各フィールドを、前のステップで解析した配列と結合します。マージされた配列がテンプレートを置き換えます。

Yii フレームワーク分析 (8) - URL 管理コンポーネント

上記は Yii フレームワーク分析 (8) - URL 管理コンポーネントの内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート