摘要:函數(shù)返回當(dāng)前請求的基地址,它有一個參數(shù),默認(rèn)為,代表返回地址不包含主機(jī)信息。上面是獲取當(dāng)前的,我們還可以使用對請求進(jìn)行修改和刪除等操作。例子更新例子中的參數(shù)為是的,很貼心的將將結(jié)果返回為。
Url
以前開發(fā)項(xiàng)目的時候,我們習(xí)慣于把網(wǎng)站網(wǎng)址做一個配置參數(shù)保存,善于用yii2的Url各種方法,無形中讓你的代碼更簡單、更靈活、更規(guī)范。
下面就一一說明一下。
base函數(shù)返回當(dāng)前請求的基地址,它有一個參數(shù)$scheme,默認(rèn)為false,代表返回地址不包含主機(jī)信息。
$scheme參數(shù)說明
false 返回地址不包含主機(jī)信息
true 包含主機(jī)地址
http 返回http協(xié)議的主機(jī)地址
https 返回https協(xié)議的主機(jī)地址
"" 返回相對的主機(jī)地址
我們以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 ""這些參數(shù),函數(shù)base并沒有去判斷,只是簡單的字符串替換,如果你輸入了base("d"),則返回
d://yii2-study.local.com
Url::canonical()返回當(dāng)前請求的標(biāo)準(zhǔn)url
我們還是以http://yii2-study.local.com/i... 來舉例
echo Url::canonical(); // 返回結(jié)果為 http://yii2-study.local.com/index.php?r=site/indexUrl::current(array $params = [], $scheme = false)
返回當(dāng)前請求+GET參數(shù),重點(diǎn)是該函數(shù)配合參數(shù)還能增加刪除GET參數(shù),這在我們某些url匹配時候會變得非常有用。
我們以http://yii2-study.local.com/i... 來舉例
echo Url::current();
執(zhí)行上述代碼后我們會得到 /index.php?r=site/index&id=78&cat=me 這樣的結(jié)果
請注意,current()和canonical()區(qū)別,如果對本例里的url執(zhí)行canonical()函數(shù),會得到http://yii2-study.local.com/i... ,相比較current,它多了主機(jī)信息,少了GET參數(shù)(路由請求除外)。
上面是current獲取當(dāng)前的Url,我們還可以使用current對請求進(jìn)行修改和刪除等操作。
例子1:我們對當(dāng)前請求增加一個name=abei GET參數(shù),只需要執(zhí)行
echo Url::current(["name"=>"abei"]);
于是我們獲得了預(yù)想的結(jié)果/index.php?r=site/index&id=78&cat=me&name=abei
例子2:我們要刪除例子url中的cat參數(shù),只需要執(zhí)行
echo Url::current(["cat"=>null]);
則結(jié)果為/index.php?r=site/index&id=78 哈哈,cat參數(shù)被刪除了
千萬記?。簞h除一個GET參數(shù)的時候,只能設(shè)置current對應(yīng)參數(shù)值為null,設(shè)置成false或""都是沒用的。
例子3:更新例子中url的cat參數(shù)為you
echo Url::current(["cat"=>"you"]);
是的,yii2很貼心的將將結(jié)果返回為 /index.php?r=site/index&id=78&cat=you。感謝薛強(qiáng),雖然現(xiàn)在在yii2的github已經(jīng)看不到你的comment,仍然要感謝你創(chuàng)造了yii2.
一個大問題,current返回的結(jié)果中如何包含主機(jī)信息那?
你只需,只需將current的第二個參數(shù)設(shè)置為true就ok了。
生成一個URL,to()和toRoute()只有一個不同,那就是當(dāng)to()的第一個函數(shù)為一個字符串的時候,會直接返回,而toRoute會將其解析成controller/action或action,然后返回url。
下面我們來舉幾個例子來說明下
Url::to(["site/about","cat"=>"abei"]); Url::toRoute(["site/about","cat"=>"abei"]); // 以上兩個函數(shù)輸出了同一個結(jié)果 index.php?r=site/about&cat=abei Url::to("site/index"); Url::toRoute("site/index"); // 以上兩個函數(shù)輸出結(jié)果不同 to()的結(jié)果為site/index toRoute()的結(jié)果為index.php?r=site/index Url::to(); Url::toRoute(); // to()無參數(shù)時返回了當(dāng)前的路由+GET,而toRoute報錯了(toRoute第一個參數(shù)不允許不存在) Url::to("@web/images/logo.gif"); Url::toRoute("@web/images/logo.gif"); // to和toRoute均支持別名。 Url::to(["site/index","#"=>"name"); Url::toRoute(["site/index","#"=>"name") // 這里有一個特殊的#,使用他能實(shí)現(xiàn)內(nèi)部錨點(diǎn),to和toRoute均可以生成index.php?r=site/index#name
哥倆好~ Url::previous($name = null)和Url::remember($url = "", $name = null)當(dāng)然,to和toRoute也有第二個參數(shù),決定返回的url是否含有主機(jī)信息。
你是否有過這樣的需求,比如記錄一個會員最近30個訪問的路徑,使用previous和remember就能輕易實(shí)現(xiàn),就和他們的名字一樣,用remember可以存儲當(dāng)前路徑,使用previous可以把remember存起來的url展示出來。
來來來,貼代碼,其他都沒有用。
Url::remember("http://www.a.com","a"); Url::remember("http://www.b.com","b"); var_dump(Url::previous("a")); // 結(jié)果輸出了http://www.a.com
yii2記住了,小提示,是session原理。
我想細(xì)心的你一定發(fā)現(xiàn)了,是的,previous和remember的參數(shù)是可以為空的,沒錯,阿北用代碼來說明。
我們還是以 http://yii2-study.local.com/i...為例
echo Url::previous(); // 當(dāng)previous參數(shù)為空時,返回returnUrl。 echo Url::remember(); // 對于remember函數(shù),當(dāng)?shù)谝粋€參數(shù)$url不提供,將記住當(dāng)前路由請求(即http://yii2-study.local.com/index.php?r=site/index),第二個參數(shù)$name不提供,則默認(rèn)為yiiwebUser::$returnUrlParam其他!
當(dāng)然Url還有一些其他函數(shù),比如home()等,比較簡單,就不一一說明,主要上面幾個大方法掌握了,Url基本就過了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22345.html
摘要:正是前人的努力,我們現(xiàn)在的編程才會如此的容易。讀懂他人代碼算法如果別人是大牛,數(shù)學(xué)學(xué)得很好,很多數(shù)學(xué)公式,很多遞歸,如果自己沒有一定的數(shù)學(xué)基礎(chǔ),可能就暈了,這個時候,數(shù)學(xué)的基本功可能就會在這里發(fā)揮作用了。 作者:caoglish原文鏈接:http://t.cn/RKcyGX3來源:知乎 查詢和閱讀文檔能力 原因:你使用編程來解決問題的時候,基本上最終的東西是代碼,但是編程的知識太廣,總...
摘要:正是前人的努力,我們現(xiàn)在的編程才會如此的容易。讀懂他人代碼算法如果別人是大牛,數(shù)學(xué)學(xué)得很好,很多數(shù)學(xué)公式,很多遞歸,如果自己沒有一定的數(shù)學(xué)基礎(chǔ),可能就暈了,這個時候,數(shù)學(xué)的基本功可能就會在這里發(fā)揮作用了。 作者:caoglish原文鏈接:http://t.cn/RKcyGX3來源:知乎 查詢和閱讀文檔能力 原因:你使用編程來解決問題的時候,基本上最終的東西是代碼,但是編程的知識太廣,總...
摘要:正是前人的努力,我們現(xiàn)在的編程才會如此的容易。讀懂他人代碼算法如果別人是大牛,數(shù)學(xué)學(xué)得很好,很多數(shù)學(xué)公式,很多遞歸,如果自己沒有一定的數(shù)學(xué)基礎(chǔ),可能就暈了,這個時候,數(shù)學(xué)的基本功可能就會在這里發(fā)揮作用了。 作者:caoglish原文鏈接:http://t.cn/RKcyGX3來源:知乎 查詢和閱讀文檔能力 原因:你使用編程來解決問題的時候,基本上最終的東西是代碼,但是編程的知識太廣,總...
摘要:正是前人的努力,我們現(xiàn)在的編程才會如此的容易。讀懂他人代碼算法如果別人是大牛,數(shù)學(xué)學(xué)得很好,很多數(shù)學(xué)公式,很多遞歸,如果自己沒有一定的數(shù)學(xué)基礎(chǔ),可能就暈了,這個時候,數(shù)學(xué)的基本功可能就會在這里發(fā)揮作用了。 作者:caoglish原文鏈接:http://t.cn/RKcyGX3來源:知乎 查詢和閱讀文檔能力 原因:你使用編程來解決問題的時候,基本上最終的東西是代碼,但是編程的知識太廣,總...
摘要:出于實(shí)戰(zhàn)基礎(chǔ)加之自語言的書籍出版以來,幾乎所有的編程書籍都講述了一個的例子作為開始。操作,其實(shí)就是一個是動作的意思,也可以描述為我們前面說的響應(yīng)地址。 作者:白狼 出處:http://www.manks.top/document/yii_first_application.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究...
閱讀 3143·2021-11-11 16:54
閱讀 2320·2021-09-04 16:48
閱讀 3227·2019-08-29 16:08
閱讀 649·2019-08-29 15:13
閱讀 1354·2019-08-29 15:09
閱讀 2671·2019-08-29 12:45
閱讀 1936·2019-08-29 12:12
閱讀 459·2019-08-26 18:27