
2014-06-26 &n∞©bsp;| 發布者:'>¶&梁國(guó)芳 | α₹σ; 查看(kàn):3320次
Thinkphp我們可(kě)以使用(yòng)閉包的(de)ε &方式定義一(yī)些(xiē)特殊需求的(de)路(lù)由,而不(bù)需¶€✔'要(yào)執行(xíng)控制(zhì)器(qì)<®的(de)操作(zuò)方法了(le),例如(rú):
'URL_ROUTE_RULES'=>array('test' =>function(){echo 'just test';},'hello/:name' =>function($name){echo 'Hello,'.$name;})
閉包定義的(de)參數(shù)傳遞在規則路(↕®lù)由和(hé)正則路(lù)由的(de)兩種情況下(xià)有(yǒu¶πδ)所區(qū)别。
規則路(lù)由的(de)參數(shù)傳遞比較簡單:
'hello/:name' =>function($name){echo 'Hello,'.$name;}
規則路(lù)由中定義的(de)動态變量的(de)名稱 就(jiù)是(shΩ↑ì)閉包函數(shù)中的(de)參數(shù)名稱,不(bù)分(fπ→©ēn)次序。 因此,如(rú)果我們訪問(wèn)的(₹£de)URL地(dì)址是(shì): http://serverName/Home/γ>hello/thinkphp
則浏覽器(qì)輸出的(de)結果是(shì): Hello,thinkphp
如(rú)果多(duō)個(gè)參數(shù)可(kě)以使用≈¶←ε(yòng):
'blog/:year/:month' =>function($year,$month){echo 'year='.$year.'&month='.$month;}
如(rú)果是(shì)正則路(lù)由的(de)話(huà),閉•≥±¥包函數(shù)中的(de)參數(shù∑)就(jiù)以正則中出現(xiàn)的(de)參數(•δ∞shù)次序來(lái)傳遞,例如(rú):
'/^new\/(\d{4})\/(\d{2})$/' =>function($year,$month){echo 'year='.$year.'&month='.$month;}
如(rú)果我們訪問(wèn): http://serverName/Home/new/2013♥φ/03 浏覽器(qì)輸出結果是(shì): year=2013&month=03
默認的(de)情況下(xià),使用(y>Ωòng)閉包定義路(lù)由的(de)話(huà),一(y↓→ī)旦匹配到(dào)路(lù)由規則,執行(xíng)完閉包方法之後,γ就(jiù)會(huì)中止後續執行(xí$₩ ng)。如(rú)果希望閉包函數(shù)執行(xíng)≤∏後,後續的(de)程序繼續執行(xíng),可(kě)以在₩↓閉包函數(shù)中使用(yòng)布爾類型的(de)返回值,例如(rú):
'hello/:name' =>function($name){echo 'Hello,'.$name.'<br/>';$_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;return false;}
該路(lù)由定義中的(de)閉包函數(shù)首先執行(±αλxíng)了(le)一(yī)段輸出代碼,然後重新設置了≥€↑£(le)$_SERVER['PATH_INFO']變量,交給後續的(de)程序繼續執行(xíng),因為(wè≤§ i)返回值是(shì)false,所以會(huì)繼續執行(¶< xíng)控制(zhì)器(qì)和(hé)操作(zuò☆)的(de)檢測,從(cóng)而會(huì)執行(xíng♥σ✘≈)Blog控制(zhì)器(qì)的(de)read¶↓₹操作(zuò)方法。
假設blog控制(zhì)器(qì)中的(de)read操作(zuò)方法λΩ♦代碼如(rú)下(xià):
public function read($name){echo 'read,'.$name.'!<br/>';}
如(rú)果我們訪問(wèn)的(de)URL地(dì)址是<±↔(shì): http://serverName/Home/ 'hello/thinkphp
則浏覽器(qì)輸出的(de)結果是(shì):
Hello,thinkphpread,thinkphp!
