この記事では、YIIがurlコンポーネントを使用して美化と管理を行う例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
urlManager コンポーネント
yii の公式ドキュメントでは、これについて次のように説明されています:
urlSuffix このルールで使用される URL サフィックスは、デフォルトでは CurlManger::urlSuffix が使用され、値は null です。たとえば、これを .html に設定すると、URL を静的ページのように見せることができます。
caseSensitive 大文字と小文字を区別するかどうかに関係なく、CUrlManager::caseSensitive がデフォルトで使用され、値は null です。
defaultParams このルールで使用されるデフォルトの取得パラメータ。このルールを使用してリクエストを解析すると、このパラメータの値が $_GET パラメータに挿入されます。
matchValue URL を作成するとき、GET パラメーターが対応するサブパターンと一致するかどうか。デフォルトでは、CurlManager::matchValue が使用され、値は null です。
この属性が false の場合、ルートとパラメータ名が指定されたルールに一致すると、それに応じて URL が作成されることを意味します。
この属性が true の場合、指定されたパラメーター値は、対応するパラメーターのサブパターンと一致する必要があります。
注: このプロパティを true に設定すると、パフォーマンスが低下します。
いくつかの例を使用して URL の動作ルールを説明します。ルールに次の 3 つが含まれていると仮定しましょう:
リーリー$this->createUrl('post/list') を呼び出して /index.php/posts を生成します。最初のルールが適用されます。
$this->createUrl('post/read',array('id'=>100)) を呼び出して /index.php/post/100 を生成します。 2 番目のルールが適用されます。
$this->createUrl('post/read',array('year'=>2008,'title'=>'a example post')) を呼び出して /index.php/post/2008/a を生成します% 20サンプル% 20投稿。 3 番目のルールが適用されます。
$this->createUrl('post/read') を呼び出して /index.php/post/read を生成します。ルールは適用されませんのでご注意ください。
要約すると、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 ルールの他の用途は、リクエスト URL を解析することです。もちろん、これは URL 生成の逆のプロセスです。たとえば、ユーザーが /index.php/post/100 をリクエストすると、上記の例の 2 番目のルールが適用されて、ルート post/read と GET パラメータ array('id'=>100) ($ から入手可能) が解析されます。 _得る)。
ヒント: この URL は、createurl メソッドによって生成された相対アドレスです。絶対 URL を取得するには、接頭辞 yii: :app()->hostInfo を使用するか、createAbsoluteUrl を呼び出します。
注: 使用される URL ルールにより、アプリケーションのパフォーマンスが低下します。これは、要求された URL を解析するときに、[CUrlManager] が特定のルールが適用されるまで、各ルールを使用して URL との一致を試みるためです。したがって、トラフィックの多い Web サイト アプリケーションでは、使用する URL ルールを最小限に抑える必要があります。
test.com/vthot は test.com/vthot/
を生成したいと考えています
コードをコピーします コードは次のとおりです: 'urlSuffix'=>'/',
URL 形式を変更するには、createUrl が自動的に新しい形式に切り替わり、アプリケーションが新しい URL を正しく理解できるように、urlManager アプリケーション要素を構成する必要があります。
リーリー
ルールコード
コードをコピーします コードは次のとおりです: 'posts'=>'post/list',
アクションコード
コードをコピーします コードは次のとおりです: echo $this->createAbsoluteUrl('post/list');
http://localhost/test/index.php/post
例 2
ルールコード
コードをコピーします コードは次のとおりです: 'post/
コードをコピーします コードは次のとおりです: echo $this->createAbsoluteUrl('post/show',array('id'=>998, 'name'=>'123'));
http://localhost/test/index.php/post/998.html?name=123
例 3
ルールコード:
コードをコピーします コードは次のとおりです:'post/
Action代码
复制代码 代码如下:echo $this->createAbsoluteUrl('post/view',array('id'=>998, 'mid'=>'tody'));
输出
http://localhost/test/index.php/post/998/tody.xml
示例四
Rule代码
复制代码 代码如下:'http://
Action代码:
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-01
http://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/<name>' => 'post/hello', name是PostController actionHello($name)的参数 'post/<alias:[-a-z]+>' => 'post/view', domain/post/e文小写 其中:前面的alias是PostController actionView($alias)的参数 '(posts|archive)/<order:(DESC|ASC)>' => '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 /tos, pass terms_of_service as the alias parameter value.
隐藏 index.php
还有一点,我们可以做进一步清理我们的网址,即在URL中藏匿index.php 入口脚本。这就要求我们配置Web服务器,以及urlManager应用程序元件。
1.add showScriptName=>false
2.add project/.htaccess
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,请记住.htaccess位于index.php同级目录 ,而不是protected/目录。其他就简单了。
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。