前回の 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) に注目してください。