之前開發項目的時候,咱們習慣於把網站網址作一個配置參數保存,善於用yii2的Url各類方法,無形中讓你的代碼更簡單、更靈活、更規範。
下面就一一說明一下。php
base函數返回當前請求的基地址,它有一個參數$scheme,默認爲false,表明返回地址不包含主機信息。
$scheme參數說明git
false 返回地址不包含主機信息github
true 包含主機地址web
http 返回http協議的主機地址yii2
https 返回https協議的主機地址session
'' 返回相對的主機地址yii
咱們以http://yii2-study.local.com/i... 來舉例函數
Url::base(); // 返回爲'' Url::base(true) // 返回爲http://yii2-study.local.com // 記住:最後沒有反斜槓哦 Url::base('http'); // 返回爲http://yii2-study.local.com Url::base('https'); // 返回爲https://yii2-study.local.com Url::base(''); // 返回爲//yii2-study.local.com
切記:http https ''這些參數,函數base並無去判斷,只是簡單的字符串替換,若是你輸入了base('d'),則返回網站
d://yii2-study.local.comurl
返回當前請求的標準url
咱們仍是以http://yii2-study.local.com/i... 來舉例
echo Url::canonical(); // 返回結果爲 http://yii2-study.local.com/index.php?r=site/index
返回當前請求+GET參數,重點是該函數配合參數還能增長刪除GET參數,這在咱們某些url匹配時候會變得很是有用。
咱們以http://yii2-study.local.com/i... 來舉例
echo Url::current();
執行上述代碼後咱們會獲得 /index.php?r=site/index&id=78&cat=me 這樣的結果
請注意,current()和canonical()區別,若是對本例裏的url執行canonical()函數,會獲得http://yii2-study.local.com/i... ,相比較current,它多了主機信息,少了GET參數(路由請求除外)。
上面是current獲取當前的Url,咱們還可使用current對請求進行修改和刪除等操做。
例子1:咱們對當前請求增長一個name=abei GET參數,只須要執行
echo Url::current(['name'=>'abei']);
因而咱們得到了預想的結果/index.php?r=site/index&id=78&cat=me&name=abei
例子2:咱們要刪除例子url中的cat參數,只須要執行
echo Url::current(['cat'=>null]);
則結果爲/index.php?r=site/index&id=78 哈哈,cat參數被刪除了
千萬記住:刪除一個GET參數的時候,只能設置current對應參數值爲null,設置成false或''都是沒用的。
例子3:更新例子中url的cat參數爲you
echo Url::current(['cat'=>'you']);
是的,yii2很貼心的將將結果返回爲 /index.php?r=site/index&id=78&cat=you。感謝薛強,雖然如今在yii2的github已經看不到你的comment,仍然要感謝你創造了yii2.
一個大問題,current返回的結果中如何包含主機信息那?
你只需,只需將current的第二個參數設置爲true就ok了。
生成一個URL,to()和toRoute()只有一個不一樣,那就是當to()的第一個函數爲一個字符串的時候,會直接返回,而toRoute會將其解析成controller/action或action,而後返回url。
下面咱們來舉幾個例子來講明下
Url::to(['site/about','cat'=>'abei']); Url::toRoute(['site/about','cat'=>'abei']); // 以上兩個函數輸出了同一個結果 index.php?r=site/about&cat=abei Url::to('site/index'); Url::toRoute('site/index'); // 以上兩個函數輸出結果不一樣 to()的結果爲site/index toRoute()的結果爲index.php?r=site/index Url::to(); Url::toRoute(); // to()無參數時返回了當前的路由+GET,而toRoute報錯了(toRoute第一個參數不容許不存在) Url::to("@web/images/logo.gif"); Url::toRoute("@web/images/logo.gif"); // to和toRoute均支持別名。 Url::to(['site/index','#'=>'name'); Url::toRoute(['site/index','#'=>'name') // 這裏有一個特殊的#,使用他能實現內部錨點,to和toRoute都可以生成index.php?r=site/index#name
固然,to和toRoute也有第二個參數,決定返回的url是否含有主機信息。
你是否有過這樣的需求,好比記錄一個會員最近30個訪問的路徑,使用previous和remember就能輕易實現,就和他們的名字同樣,用remember能夠存儲當前路徑,使用previous能夠把remember存起來的url展現出來。
來來來,貼代碼,其餘都沒有用。
Url::remember('http://www.a.com','a'); Url::remember('http://www.b.com','b'); var_dump(Url::previous('a')); // 結果輸出了http://www.a.com
yii2記住了,小提示,是session原理。
我想細心的你必定發現了,是的,previous和remember的參數是能夠爲空的,沒錯,阿北用代碼來講明。
咱們仍是以 http://yii2-study.local.com/i...爲例
echo Url::previous(); // 當previous參數爲空時,返回returnUrl。 echo Url::remember(); // 對於remember函數,當第一個參數$url不提供,將記住當前路由請求(即http://yii2-study.local.com/index.php?r=site/index),第二個參數$name不提供,則默認爲yii\web\User::$returnUrlParam
固然Url還有一些其餘函數,好比home()等,比較簡單,就不一一說明,主要上面幾個大方法掌握了,Url基本就過了。