空控制器

空控制器的概念是指當(dāng)系統(tǒng)找不到指定的控制器名稱的時(shí)候,系統(tǒng)會嘗試定位空控制器(Error),利用這個(gè)機(jī)制我們可以用來定制錯(cuò)誤頁面和進(jìn)行URL的優(yōu)化。
現(xiàn)在我們把前面的需求進(jìn)一步,把URL由原來的

http://serverName/index/city/shanghai/

變成

http://serverName/index/shanghai/

這樣更加簡單的方式,如果按照傳統(tǒng)的模式,我們必須給每個(gè)城市定義一個(gè)控制器類,然后在每個(gè)控制器類的index方法里面進(jìn)行處理。 可是如果使用空控制器功能,這個(gè)問題就可以迎刃而解了。

我們可以給項(xiàng)目定義一個(gè)Error控制器類

<?php
namespace app\index\controller;

use think\Request;

class Error 
{
    public function index(Request $request)
    {
        //根據(jù)當(dāng)前控制器名來判斷要執(zhí)行那個(gè)城市的操作
        $cityName = $request->controller();
        return $this->city($cityName);
    }
    
    //注意 city方法 本身是 protected 方法
    protected function city($name)
    {
        //和$name這個(gè)城市相關(guān)的處理
         return '當(dāng)前城市' . $name;
    }
}

接下來,我們就可以在瀏覽器里面輸入

http://serverName/index/beijing/
http://serverName/index/shanghai/
http://serverName/index/shenzhen/

由于系統(tǒng)并不存在beijing、shanghai或者shenzhen控制器,因此會定位到空控制器(Error)去執(zhí)行,會看到依次輸出的結(jié)果是:

當(dāng)前城市:beijing
當(dāng)前城市:shanghai
當(dāng)前城市:shenzhen

空控制器和空操作還可以同時(shí)使用,用以完成更加復(fù)雜的操作。

空控制器Error是可以定義的

// 更改默認(rèn)的空控制器名
'empty_controller'      => 'MyError',

當(dāng)找不到控制器的時(shí)候,就會定位到MyError控制器類進(jìn)行操作。

文檔最后更新時(shí)間:2018-04-26 08:36:20

文檔
目錄

深色
模式

切換
寬度