【小(xiǎo)編推薦】ThinkPHP3.2——閉包支持

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ú):

  1. 'URL_ROUTE_RULES'=>array(
  2. 'test' =>
  3. function(){
  4. echo 'just test';
  5. },
  6. 'hello/:name' =>
  7. function($name){
  8. echo 'Hello,'.$name;
  9. }

參數(shù)傳遞

閉包定義的(de)參數(shù)傳遞在規則路(↕®lù)由和(hé)正則路(lù)由的(de)兩種情況下(xià)有(yǒu¶πδ)所區(qū)别。

規則路(lù)由

規則路(lù)由的(de)參數(shù)傳遞比較簡單:

  1. 'hello/:name' =>
  2. function($name){
  3. echo 'Hello,'.$name;
  4. }

規則路(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):

  1. 'blog/:year/:month' =>
  2. function($year,$month){
  3. echo 'year='.$year.'&month='.$month;
  4. }
正則路(lù)由

如(rú)果是(shì)正則路(lù)由的(de)話(huà),閉•≥±¥包函數(shù)中的(de)參數(shù‍∑)就(jiù)以正則中出現(xiàn)的(de)參數(•δ∞shù)次序來(lái)傳遞,例如(rú):

  1. '/^new\/(\d{4})\/(\d{2})$/' =>
  2. function($year,$month){
  3. echo 'year='.$year.'&month='.$month;
  4. }

如(rú)果我們訪問(wèn): http://serverName/Home/new/2013♥φ/03 浏覽器(qì)輸出結果是(shì): year=2013&month=03

繼續執行(xíng)

默認的(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ú):

  1. 'hello/:name' =>
  2. function($name){
  3. echo 'Hello,'.$name.'<br/>';
  4. $_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;
  5. return false;
  6. }

該路(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à):

  1. public function read($name){
  2. echo 'read,'.$name.'!<br/>';
  3. }

如(rú)果我們訪問(wèn)的(de)URL地(dì)址是<±↔(shì): http://serverName/Home/ 'hello/thinkphp

則浏覽器(qì)輸出的(de)結果是(shì):

  1. Hello,thinkphp
  2. read,thinkphp!