搜尋
首頁後端開發php教程YII如何使用url元件美化管理

這篇文章主要介紹了YII使用url元件美化管理的方法,結合實例形式較為詳細的分析了urlManager元件的具體功能及相關使用技巧,需要的朋友可以參考下

本文實例講述了YII使用url元件美化管理的方法。分享給大家供大家參考,具體如下:

urlManager元件

yii的官方文件對此的解釋如下:

urlSuffix  此規則使用的url後綴,預設使用CurlManger::urlSuffix,值為null。例如可以將此設定為.html,讓url看起來「像」是一個靜態頁面。
caseSensitive  是否大小寫敏感,預設使用CUrlManager::caseSensitive,值為null。
defaultParams  此規則使用的預設get參數。當使用此規則來解析一個請求時,這個參數的值會被注入到$_GET參數中。
matchValue  當建立一個URL時,GET參數是否符合對應的子模式。預設使用CurlManager::matchValue,值為null。

如果該屬性為 false,那麼表示當路由和參數名稱符合給定的規則時,將以此來建立一個URL。

如果該屬性為true,那麼給定的參數值夜必須符合對應的參數子模式。

注意:將此屬性設為true會降低效能。

我們使用一些範例來解釋網址工作規則。我們假設我們的規則包含以下三個:

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/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 sample post。第三個規則適用。

呼叫$this->createUrl('post/read')產生/index.php/post/read。請注意,沒有規則適用。

總之,當使用createUrl產生網址,路線和傳遞給該方法的GET參數被用來決定哪些網址規則適用。如果關聯規則中的每個參數可以在GET參數找到的,將傳遞給createUrl ,如果路線的規則也符合路線參數,則規則將用來產生網址。

如果GET參數傳遞到createUrl是以上所要求的一項規則,其他參數將出現在查詢字串。例如,如果我們呼叫$this->createUrl('post/read',array('id'=>100,'year'=>2008)) ,我們將獲得/index.php/post/100? year=2008。為了使這些額外參數出現在路徑資訊的一部分,我們應該給規則附加/* 。因此,該規則post//* ,我們可以取得網址/index.php/post/100/year/2008 。

正如我們所提到的,URL規則的其他用途是解析請求網址。當然,這是URL生成的一個逆過程。例如, 當使用者請求/index.php/post/100 ,上面範例的第二個規則將適用來解析路線post/read和GET參數array('id'=>100) (可透過$_GET取得) 。

提示:此網址透過createurl方法所產生的是一個相對位址。為了得到一個絕對的url ,我們可以用前綴yii: :app()->hostInfo ,或呼叫createAbsoluteUrl 。

附註:使用的URL規則將降低應用的效能。這是因為當解析請求的URL ,[ CUrlManager ]嘗試使用每個規則來匹配它,直到某個規則可以適用。因此,高流量網站應用應盡量減少其使用的URL規則。

test.com/vthot 想產生test.com/vthot/

&#39;urlSuffix&#39;=>&#39;/&#39;,

要更改URL格式,我們應該配置urlManager應用程式元件,以便createUrl可以自動切換到新格式和應用程式可以正確理解新的網址:

&#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;),
  ),
),

範例一

Rule程式碼

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

Action程式碼

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

輸出

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

範例二

Rule程式碼

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

Action程式碼

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

範例三

#Rule程式碼:

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

Action程式碼

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

範例四

Rule程式碼

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

Action程式碼:

#
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) controller/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就直接不允許存取

&#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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

您如何從PHP會話中檢索數據?您如何從PHP會話中檢索數據?May 01, 2025 am 12:11 AM

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

您如何使用會議來實施購物車?您如何使用會議來實施購物車?May 01, 2025 am 12:10 AM

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。