YII urlコンポーネント美化管理を使用する方法

6478 ワード

本論文の例は、YIIがurlコンポーネントを用いて管理を美化する方法を説明する.皆さんに参考にしてあげます.具体的には以下の通りです.
url Managerコンポーネント
yiiの公式文書は以下のように解釈される.
url Suffix  この規則で使用されるurlサフィックスは、デフォルトではCurl Manger:url Suffixを使用しています.値はnullです.この設定は、例えば.htmlであり、urlが「似ている」ように見えるようにすることができます.caseSensitive  大きさや書き込みが敏感かどうかは、デフォルトではCUrlManager:caseSensitiveを使用します.値はnullです.default Paraams  この規則が使用するデフォルトのgetパラメータ.この規則を使って要求を解析すると、このパラメータの値は$uに注入されます.GETパラメータ中ですmatch Value  URLを作成すると、GETパラメータは対応するサブモードにマッチするかどうか.デフォルトではCurl Managerを使用します.:match Valueで、値はnullです.
この属性がfalseである場合、ルーティングおよびパラメータ名が所定の規則に一致するとき、URLを作成することを意味する.
この属性がtrueである場合、指定されたパラメータ値は、対応するパラメータサブモードと一致する必要があります.
この属性をtrueに設定すると性能が低下します.
私たちはいくつかの例を使ってウェブサイトの作業規則を説明します.私たちの規則には次の三つが含まれていると仮定します.

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

呼び出し$this->createUrl('post/list')生成/index.php/posts.最初のルールは適用されます.
呼び出し$this->createUrl('post/read',array('id'=>100)生成/index.php/post/100.二つ目のルールは適用されます.
呼び出し$this->createUrl('post/read',array('year'=>2008,'title'=''a sample post')生成/index.php/post/2008/a%20 sample%20 post.第三の規則は適用されます.
呼び出し$this->createUrl('post/read')生成/index.php/post/read.ルールがないので適用します.
つまり、createUrlを使ってアドレスを生成する場合、ルートとこの方法に渡すGETパラメータは、どのアドレスルールが適用されるかを決定するために用いられる.関連ルールの各パラメータがGETパラメータで見出される場合、ルートのルールがルートパラメータと一致する場合、ルールはアドレスを生成するために使用されます.
GETパラメータがcreateUrlに渡される場合、他のパラメータは照会文字列に現れる.例えば、私たちが$this->createUrl('post/read'、array('id'=>100、'year'=>2008)を呼び出すと、私たちは/index.php/post/100を得ることができます.year=2008.これらの付加的なパラメータを経路情報の一部に出現させるために、規則に追加/*を与えるべきである.したがって、このルールはpost/*、URL/index.php/post/100/year/2008を取得できます.
私たちが言及したように、URLルールの他の用途は解析要求URLです.もちろん、これはURL生成の逆プロセスである.例えば、ユーザ要求/index.php/post/100の場合、上記の例の第二のルールは、ルートpost/readとGETパラメータarray('id'=>100)を解析するために適用されます.
ヒント:このURLはcreateurl方法によって生成されたのは相対アドレスです.絶対的なurlを得るために、プレフィックスyii:app()->hostInfoを使って、またはcreateAbsoluute Urlを呼び出すことができます.
注:使用するURLルールは、アプリケーションの性能を低下させます.これは、解析要求のURLがあるルールが適用されるまで、各ルールを使ってマッチングを試みるからです.そのため、高流量ウェブサイトの応用はできるだけその使うURLの規則を減らすべきです.
test.com/vthotはtest.com/vthotを生成したいです.

   'urlSuffix'=>'/', 
 
URLのフォーマットを変更するには、私達はurlManagerアプリケーション要素を配置して、createUrlが自動的に新しいフォーマットとアプリケーションに切り替えることができます.

'urlManager'=>array(
  'urlFormat'=>'path',
  'showScriptName'=>false,
  'urlSuffix'=>'.html',
  'rules'=>array(
    'posts'=>'post/list',
    'post/'=>array('post/show','urlSuffix'=>'.html'),
    'post//'=>array('post/view','urlSuffix'=>'.xml'),
  ),
),

例1
Ruleコード

   'posts'=>'post/list', 
 
アクションコード

   echo $this->createAbsoluteUrl('post/list'); 
 
出力
http://localhost/test/index.php/post
例2
Ruleコード

   'post/'=>array('post/show','urlSuffix'=>'.html'), 
 
アクションコード

   echo $this->createAbsoluteUrl('post/show',array('id'=>998, 'name'=>'123')); 
 
出力
http://localhost/test/index.php/post/998.html?name=123
例3
Ruleコード:

   'post//'=>array('post/view','urlSuffix'=>'.xml'), 
 
アクションコード

   echo $this->createAbsoluteUrl('post/view',array('id'=>998, 'mid'=>'tody')); 
 
出力
http://localhost/test/index.php/post/998/tody.xml
例4
Ruleコード

   'http://.vt.com/<_c:>'=>array('<_c>/host','urlSuffix'=>'.me'), 
 
アクションコード:

echo $this->createAbsoluteUrl('look/host',array('user'=>'boy','mid'=>'ny-01'));
echo '';
echo $this->createAbsoluteUrl('looks/host',array('user'=>'boy','mid'=>'ny-01'));

出力
http://boy.vt.com/look.me?mid=ny-01http://localhost/test/index.php/looks/host/user/boy/mid/ny-01
1)controller/Update/id/23

public function actionUpdate(){
  $id = Yii::app()->request->getQuery('id') ;      $_GET['id']
}
//$id = Yii::app()->request->getPost('id');      $_POST['id']
//$id = Yii::app()->request->getParam('id'); //CHttpRequest  

2)public function actionUpdate($id)  このようなマルチキーはサポートされていません.GETの中にidがあるかどうか確認します.idがないと直接訪問できません.

'sayhello/' => 'post/hello', name PostController actionHello($name)   
'post/' => 'post/view',  domain/post/e      :   alias PostController actionView($alias)   
'(posts|archive)/' => 'post/index', domain/posts/DESC domain/posts/ASC
'(posts|archive)' => 'post/index', domain/posts domain/archive
'tos' => array('website/page', 'defaultParams' => array('alias' =>'terms_of_service')),

When the URL is/tot,pass terms_of_service as the alias parameter value.
index.phpを隠す
もう一つは、URLに隠れているindex.phpをさらに整理します.  エントリスクリプト.これはWebサーバとurl Managerアプリケーション素子の設定を要求します.
1.add show Script Name=>false
2.add project/.httaccess

RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php

3.リリースrewrite
簡単に言えば、main.phpで簡単にurlManagerを設定して、3つのルールを言って、ほぼすべてカバーしました.最後にindex.phpを隠すので、覚えてください.httaccessはindex.phpの同級のディレクトリに位置して、protected/目次ではありません.他は簡単です.
ここで述べたいのですが、Yiiフレームに基づくPHPプログラムの設計に役立ちます.