ホームページ  >  記事  >  バックエンド開発  >  PHP 開発フレームワーク Yii Framework チュートリアル (5) URL 管理

PHP 開発フレームワーク Yii Framework チュートリアル (5) URL 管理

黄舟
黄舟オリジナル
2017-01-21 09:42:351107ブラウズ

前回の Yii Framework 開発の簡潔なチュートリアル (4) ハングマンの単語推測ゲームの例では、問題のいくつかの側面が省略されていました。1 つは設定ファイル main.php の URLManager、もう 1 つはコントローラーの基本クラス CComponent、そして3 番目は、View 使用法 CHtml ヘルパー クラスの定義です。この記事は、URLManager、つまり URL 管理の概要から始まります。

return array(
...
'components'=>array(
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'game/guess/'=>'game/guess',
),
),
),
);

Web アプリケーションの完全な URL 管理には 2 つの側面が含まれます。まず、ユーザーが指定された URL をリクエストすると、アプリケーションはそれを理解可能なパラメーターに解析する必要があります。次に、アプリケーションは、作成された URL をアプリケーションが理解できるように、URL を作成する方法を提供する必要があります。 Yii アプリケーションの場合、これは CUrlManager の助けを借りて行われます。

パス形式の URL を使用する場合、URL をよりユーザーフレンドリーにするために特定の URL ルールを指定できます。たとえば、長い URL /index.php/post/read/id/100 の代わりに、短い URL /post/100 を生成できます。 URL の作成と解析は、CUrlManager を通じて URL ルールを指定することによって行われます。

URL ルールを指定するには、urlManager アプリケーション要素の rules 属性を設定する必要があります:

array(
......
'components'=>array(
......
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'pattern1'=>'route1',
'pattern2'=>'route2',
'pattern3'=>'route3',
),
),
),
);

これらのルールは、ルート形式のペアの一連の配列として指定され、各ペアは 1 つのルールに対応します。ルートの形式は、区切り文字や修飾子のない有効な正規表現である必要があります。これは、URL を照合するために使用されるパス情報の部分です。また、ルートは有効なルート コントローラーを指す必要があります。

ルールは少数の GET パラメータをバインドできます。パラメーターの一般的な形式は次のとおりです。


ParamName は GET パラメーター名を表し、オプションの ParamPattern は GET パラメーター値と一致するために使用される正規表現を表します。 Web アドレス (URL) を生成する場合、これらのパラメーター トークンは対応するパラメーター値に置き換えられ、URL を解析する場合は、結果を解析することによって対応する GET パラメーターが生成されます。

いくつかの例を使用して URL の動作ルールを説明します。ルールには次の 3 つが含まれると仮定します。

array(
'posts'=>'post/list',
'post/'=>'post/read',
'post//

要約すると、createUrl を使用して URL を生成する場合、メソッドに渡されるルートと GET パラメーターを使用して、どの URL ルールが適用されるかを決定します。アソシエーション ルールの各パラメータが GET パラメータで見つかると、そのパラメータが createUrl に渡されます。ルート ルールもルート パラメータと一致すると、そのルールが URL の生成に使用されます。

createUrl に渡される GET パラメータが上記で必要なルールの 1 つである場合、他のパラメータはクエリ文字列に表示されます。たとえば、 $this->createUrl('post/read',array('id'=>100,'year'=>2008)) を呼び出すと、 /index.php/post/100 が取得されます。 ? 年 = 2008 年。これらの追加パラメータをパス情報の一部として表示するには、ルールに /* を追加する必要があります。 したがって、ルール post//* を使用すると、URL /index.php/post/100/year/2008 を取得できます。

前述したように、URL ルールの他の用途は、リクエスト URL を解析することです。もちろん、これは URL 生成の逆のプロセスです。たとえば、ユーザーが /index.php/post/100 をリクエストすると、上記の例の 2 番目のルールが適用されて、ルート post/read と GET パラメータ array('id'=>100) ($ から入手可能) が解析されます。 _得る)。

createurl メソッドは相対アドレスを生成します。絶対 URL を取得するには、先頭に「yii」を付けることができます>

注: URL ルールを使用すると、アプリケーションのパフォーマンスが低下します。これは、要求された URL を解析するときに [CUrlManager] がすべてのルールを使用しようとするためです。したがって、トラフィックの多い Web サイト アプリケーションでは、使用する URL ルールを最小限に抑える必要があります。

ルール「game/guess/'=>game/guess」を見てください。 Hangman でも使用されます。これは、同様のすべての /game/guess/xx を GameController の actionGuess メソッドである game/guess にマップし、g='x' の形式で GET パラメーターを渡します。リンクを参照してください。各文字の

CHtml::linkButton(chr($i),array('submit'=>array
('guess','g'=>chr($i))));

クリックされた文字リンクは /game/guess/?g=x または /game/guess/x Yii フレームワークは main.php で定義された urlManager の一致ルールに従って GameController の actionGuess メソッドを呼び出します。この方法で $_GET['g を actionGuess. '] に渡すと、このパラメータの値にアクセスできます

// check to see if the letter is guessed correctly
if(isset($_GET['g'][0]) && ($result=$this->guess($_GET['g'][0]))!==null)
$this->render($result ? 'win' : 'lose');
else // the letter is guessed correctly, but not win yet
{
$guessed=$this->getPageState('guessed',array());
$guessed[$_GET['g'][0]]=true;
$this->setPageState('guessed',$guessed,array());
$this->render('guess');
}使用urlManager 也允许自定义规则,或者隐藏 index.php 。

上記は、PHP 開発フレームワーク Yii Framework のチュートリアル (5) の内容です。 ) URL 管理。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

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