空控制器
空控制器的概念是指當系統找不到指定的控制器名稱的時候,系統會嘗試定位空控制器(Error),利用這個機制我們可以用來定制錯誤頁面和進行URL的優化。
現在我(wo)們把(ba)(ba)前面的需求進一步,把(ba)(ba)URL由(you)原來(lai)的
http://serverName/index/city/shanghai/
變成
http://serverName/index/shanghai/
這樣更(geng)加簡單的(de)方式,如(ru)(ru)果(guo)按照傳統(tong)的(de)模式,我們必須給(gei)每個城(cheng)市定(ding)義一個控(kong)制器(qi)類(lei),然后在(zai)每個控(kong)制器(qi)類(lei)的(de)index方法里(li)面進行(xing)處理(li)。 可是如(ru)(ru)果(guo)使用空控(kong)制器(qi)功能,這個問(wen)題就可以迎刃(ren)而解(jie)了。
我們(men)可以(yi)給項目(mu)定義一個Error控(kong)制器(qi)類
<?php
namespace app\index\controller;
use think\Request;
class Error
{
public function index(Request $request)
{
//根據(ju)當(dang)前控制器名來判斷要執行(xing)那個城市的(de)操作
$cityName = $request->controller();
return $this->city($cityName);
}
//注(zhu)意(yi) city方(fang)法 本身是 protected 方(fang)法
protected function city($name)
{
//和$name這個城市相(xiang)關的(de)處理
return '當前(qian)城市(shi)' . $name;
}
}
接下來,我(wo)們就可以(yi)在瀏覽(lan)器里(li)面輸入(ru)
http://serverName/index/beijing/
http://serverName/index/shanghai/
http://serverName/index/shenzhen/
由于系統(tong)并不存(cun)在beijing、shanghai或者shenzhen控制(zhi)器,因此會定(ding)位到空控制(zhi)器(Error)去(qu)執行,會看到依次(ci)輸(shu)出的結果是:
當前城市:beijing
當前城市:shanghai
當前城市:shenzhen
空(kong)控(kong)制器和空(kong)操(cao)作(zuo)還可(ke)以(yi)同時使用,用以(yi)完成更加復雜的操(cao)作(zuo)。
空(kong)控制器(qi)Error是(shi)可以定義的
// 更改(gai)默認的空控(kong)制器名(ming)
'empty_controller' => 'MyError',
當找不到(dao)控(kong)制器的時(shi)候,就會定(ding)位到(dao)MyError控(kong)制器類進(jin)行操作(zuo)。
