【小(xiǎo)編推薦】ThinkPHP3≠✘σ.2——空(kōng)控制(zhì)器(qì)

2014-06-26   | &δ€±§nbsp; 發布者:梁國(guó≠​±♠)芳   | &n≤®bsp; 查看(kàn):3320次

Thinkphp

空(kōng)控制(zhì)器(qì)的(de)概念是(shì)指當系統找不(<↓ bù)到(dào)請(qǐng)求的(de)控制(zhì)器(qì)名稱的(d'βαe)時(shí)候,系統會(huì)嘗試定位空(kō&★→ng)控制(zhì)器(qì)(EmptyCon←‍troller),利用(yòng)這(zhè)個(gè)機(jī)制€¥(zhì)我們可(kě)以用(yòng)÷σ✔≠來(lái)定制(zhì)錯(cuò)誤頁面和(hé)進行(♥φxíng)URL的(de)優化(huà)。

現(xiàn)在我們把前面的(de)需求進一(yī)步,把URL由原來(lá→§i)的(de)

  1. http://serverName/index.php/Home₹↓>/City/shanghai/

變成

  1. http://serverName/index.php/Home/shanghai/

這(zhè)樣更加簡單的(de)方式,如(rú)果按照(zhào)傳統的(dλ☆↑¶e)模式,我們必須給每個(gè)城(chδ™∞∏éng)市(shì)定義一(yī)個(gè)控制€←→(zhì)器(qì)類,然後在每個(gè)控制(zhì)器(qì)類的(de)∏•index方法裡(lǐ)面進行(xíng)處理(lǐ)。可(kě)是(shì)σπ☆如(rú)果使用(yòng)空(kōng)控制(zhì)器(qì)功能(nénβ ‌g),這(zhè)個(gè)問(wèn)題就(jiù)可(k≤¥ě)以迎刃而解了(le)。

我們可(kě)以給項目定義一(yī)個(‍§←gè)EmptyController類

  1. php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class EmptyController extends Controller{
  5. public function index(){
  6. //根據當前控制(zhì)器(qì)名來(lái¶≥σ&)判斷要(yào)執行(xíng)那(nà)個(gè)© ∞§城(chéng)市(shì)的(de)操作(zuò)
  7. $cityName = CONTROLLER_NAME;
  8. $this->city($cityName);
  9. }
  10. //注意 city方法 本身(shēn)是(shì) prot≈≤α₽ected 方法
  11. protected function city($name){
  12. //和(hé)$name這(zhè)個(gè)城(c¥₩≈Ωhéng)市(shì)相(xiàng)關的(≠σ✔αde)處理(lǐ)
  13. echo '當前城(chéng)市(shì)' . $name;
  14. }
  15. }

接下(xià)來(lái),我們就(jiù)可(kě)以在浏覽器(qì)裡>≈Ω&(lǐ)面輸入

  1. http://serverName/index.php/Home/beijing/ >
  2. http://serverName/index.php/Home/shanghai/
  3. http://serverName/index.php/H★₹ome/shenzhen/

由于系統并不(bù)存在beijing、shanghai或者shenzhenσσ→控制(zhì)器(qì),因此會(huì)定位到 ∞γ(dào)空(kōng)控制(zhì)器(qì)(₹πEmptyController)去(qù)執行(xíng),會(huì)≈•α看(kàn)到(dào)依次輸出的(de)結果是(shì↔↓↓>):

  1. 當前城(chéng)市(shì):beijing
  2. 當前城(chéng)市(shì):shanghai
  3. 當前城(chéng)市(shì):shenzhen

如(rú)果你(nǐ)的(de)默認控制(zhì)器(qì)®✔< 層不(bù)是(shì)Controlle✘∑r的(de)話(huà),空(kōng)控制(zhì)器(qìδ↑±)也(yě)會(huì)随之改變,例如(rú'β)默認的(de)控制(zhì)器(qì)層是(shì)Action:

  1. 'DEFAULT_C_LAYER' => 'Action', // 默認的(de)控制(zhì)器(qì)層名稱

那(nà)麽可(kě)能(néng)你(nǐ)→→ ε的(de)空(kōng)控制(zhì)器(qì)定義就(jiù)變成了∑α≥α(le)EmptyAction類:

  1. php
  2. namespace Home\Action;
  3. use Think\Controller;
  4. class EmptyAction extends Controller{
  5. public function index(){
  6. //根據當前控制(zhì)器(qì)名來(lái)判斷要★✔₽×(yào)執行(xíng)那(nà)個(gè)城(chéng)πφλ•市(shì)的(de)操作(zuò)
  7. $cityName = CONTROLLER_NAME;
  8. $this->city($cityName);
  9. }
  10. //注意 city方法 本身(shēn)是(shì"¶') protected 方法
  11. protected function city($name){
  12. //和(hé)$name這(zhè)個(g✘↓☆è)城(chéng)市(shì)相(xiàng)關的(de)處理(lǐ) ₹
  13. echo '當前城(chéng)市(shì)' . $name;
  14. }
  15. }

空(kōng)控制(zhì)器(qì)和(hé™™→®)空(kōng)操作(zuò)還(hái)可(kě)以同時(sh₹₽í)使用(yòng),用(yòng)以完成更加複雜(zá)的(d§•™e)操作(zuò)。