ホームページ  >  記事  >  バックエンド開発  >  YII が URL コンポーネントを使用して管理を美しくする方法

YII が URL コンポーネントを使用して管理を美しくする方法

不言
不言オリジナル
2018-06-15 14:03:511447ブラウズ

この記事では、YII が url コンポーネントを使用して管理を美しくする方法を主に紹介し、urlManager コンポーネントの特定の機能と関連する使用スキルを例の形式で詳細に分析します。

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 つが含まれると仮定します。

array(
  'posts'=>'post/list',
  &#39;post/<id:\d+>&#39;=>&#39;post/read&#39;,
  &#39;post/<year:\d{4}>/<title>&#39;=>&#39;post/read&#39;,
)

$this->createUrl('post/list') を呼び出して /index.php/ を生成します。投稿。最初のルールが適用されます。

$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/ サンプル投稿。 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/7c3fcffaa6a0c0977ec663791c253100/* を使用すると、URL /index.php/post/100/year/2008 を取得できます。

前述したように、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/

&#39;urlSuffix&#39;=>&#39;/&#39;,
を生成したい

URL形式を変更するには、createUrlが自動的に新しい形式に切り替えられるように、urlManagerアプリケーション要素を構成する必要があります。そして、アプリケーションは新しい URL を正しく理解できます:

&#39;urlManager&#39;=>array(
  &#39;urlFormat&#39;=>&#39;path&#39;,
  &#39;showScriptName&#39;=>false,
  &#39;urlSuffix&#39;=>&#39;.html&#39;,
  &#39;rules&#39;=>array(
    &#39;posts&#39;=>&#39;post/list&#39;,
    &#39;post/<id:\d+>&#39;=>array(&#39;post/show&#39;,&#39;urlSuffix&#39;=>&#39;.html&#39;),
    &#39;post/<id:\d+>/<mid:\w+>&#39;=>array(&#39;post/view&#39;,&#39;urlSuffix&#39;=>&#39;.xml&#39;),
  ),
),

例 1

ルール コード

&#39;posts&#39;=>&#39;post/list&#39;,

アクション コード

echo $this->createAbsoluteUrl(&#39;post/list&#39;);

出力

http://localhost/test/index.php/post

例 2

ルール コード

&#39;post/<id:\d+>&#39;=>array(&#39;post/show&#39;,&#39;urlSuffix&#39;=>&#39;.html&#39;),

アクション コード

echo $this->createAbsoluteUrl(&#39;post/show&#39;,array(&#39;id&#39;=>998, &#39;name&#39;=>&#39;123&#39;));

出力

http://localhost/test/index.php/post/998.html?name=123

例 3

ルールコード:

&#39;post/<id:\d+>/<mid:\w+>&#39;=>array(&#39;post/view&#39;,&#39;urlSuffix&#39;=>&#39;.xml&#39;),

アクション コード

echo $this->createAbsoluteUrl(&#39;post/view&#39;,array(&#39;id&#39;=>998, &#39;mid&#39;=>&#39;tody&#39;));

出力

http://localhost/test/index.php/post/998/tody.xml

例 4

ルール コード

&#39;http://<user:\w+>.vt.com/<_c:(look|seek)>&#39;=>array(&#39;<_c>/host&#39;,&#39;urlSuffix&#39;=>&#39;.me&#39;),

アクション コード:

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

出力

http ://boy .vt.com/look.me?mid=ny-01
http://localhost/test/index.php/looks/host/user/boy/mid/ny-01

1) console/Update/id/23

public function actionUpdate(){
  $id = Yii::app()->request->getQuery(&#39;id&#39;) ; 经过处理的$_GET[&#39;id&#39;]
}
//$id = Yii::app()->request->getPost(&#39;id&#39;); 经过处理的$_POST[&#39;id&#39;]
//$id = Yii::app()->request->getParam(&#39;id&#39;); //CHttpRequest更多

2) public function actionUpdate($id) これは複数の主キーをサポートしていません。 GET id に ID があるかどうかに関係なく、id なしで直接アクセスすることはできません

&#39;sayhello/<name>&#39; => &#39;post/hello&#39;, name是PostController actionHello($name)的参数
&#39;post/<alias:[-a-z]+>&#39; => &#39;post/view&#39;,  domain/post/e文小写 其中:前面的alias是PostController actionView($alias)的参数
&#39;(posts|archive)/<order:(DESC|ASC)>&#39; => &#39;post/index&#39;, domain/posts/DESC或domain/posts/ASC
&#39;(posts|archive)&#39; => &#39;post/index&#39;, domain/posts或domain/archive
&#39;tos&#39; => array(&#39;website/page&#39;, &#39;defaultParams&#39; => array(&#39;alias&#39; =>&#39;terms_of_service&#39;)),

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/目录。其他就简单了。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Yii基于数组和对象的Model查询

Yii和CKEditor实现图片上传的功能

Yii2如何使用Bootbox插件实现自定义弹窗

以上がYII が URL コンポーネントを使用して管理を美しくする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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