空(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)
http://serverName/index.php/Home₹↓>/City/shanghai/
變成
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類
phpnamespace Home\Controller;use Think\Controller;class EmptyController extends Controller{public function index(){//根據當前控制(zhì)器(qì)名來(lái¶≥σ&)判斷要(yào)執行(xíng)那(nà)個(gè)© ∞§城(chéng)市(shì)的(de)操作(zuò)$cityName = CONTROLLER_NAME;$this->city($cityName);}//注意 city方法 本身(shēn)是(shì) prot≈≤α₽ected 方法protected function city($name){//和(hé)$name這(zhè)個(gè)城(c¥₩≈Ωhéng)市(shì)相(xiàng)關的(≠σ✔αde)處理(lǐ)echo '當前城(chéng)市(shì)' . $name;}}
接下(xià)來(lái),我們就(jiù)可(kě)以在浏覽器(qì)裡>≈Ω&(lǐ)面輸入
http://serverName/index.php/Home/beijing/ >http://serverName/index.php/Home/shanghai/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ì↔↓↓>):
當前城(chéng)市(shì):beijing當前城(chéng)市(shì):shanghai當前城(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:
'DEFAULT_C_LAYER' => 'Action', // 默認的(de)控制(zhì)器(qì)層名稱
那(nà)麽可(kě)能(néng)你(nǐ)→→ ε的(de)空(kōng)控制(zhì)器(qì)定義就(jiù)變成了∑α≥α(le)EmptyAction類:
phpnamespace Home\Action;use Think\Controller;class EmptyAction extends Controller{public function index(){//根據當前控制(zhì)器(qì)名來(lái)判斷要★✔₽×(yào)執行(xíng)那(nà)個(gè)城(chéng)πφλ•市(shì)的(de)操作(zuò)$cityName = CONTROLLER_NAME;$this->city($cityName);}//注意 city方法 本身(shēn)是(shì"¶') protected 方法protected function city($name){//和(hé)$name這(zhè)個(g✘↓☆è)城(chéng)市(shì)相(xiàng)關的(de)處理(lǐ) ₹echo '當前城(chéng)市(shì)' . $name;}}
空(kōng)控制(zhì)器(qì)和(hé™™→®)空(kōng)操作(zuò)還(hái)可(kě)以同時(sh₹₽í)使用(yòng),用(yòng)以完成更加複雜(zá)的(d§•™e)操作(zuò)。




