空控制器
空控制器的概念是指當系統找不到指定的控制器名稱的時候,系統會嘗試定位空控制器(Error),利用這個機制我們可以用來定制錯誤頁面和進行URL的優化。
現在我們把前面的需求進一步,把URL由原來的
http://serverName/index/city/shanghai/
變成
http://serverName/index/shanghai/
這樣更加簡單的方式,如果按照傳統的模式,我們必須給每個城市定義一個控制器類,然后在每個控制器類的index方法里面進行處理。 可是如果使用空控制器功能,這個問題就可以迎刃而解了。
我們可以給項目定義一個Error控制器類
<?php
namespace app\index\controller;
use think\Request;
class Error
{
public function index(Request $request)
{
//根據當前控制器名來判斷要執行那個城市的操作
$cityName = $request->controller();
return $this->city($cityName);
}
//注意 city方法 本身是 protected 方法
protected function city($name)
{
//和$name這個城市相關的處理
return '當前城市' . $name;
}
}
接下來,我們就可以在瀏覽器里面輸入
http://serverName/index/beijing/
http://serverName/index/shanghai/
http://serverName/index/shenzhen/
由于系統并不存在beijing、shanghai或者shenzhen控制器,因此會定位到空控制器(Error)去執行,會看到依次輸出的結果是:
當前城市:beijing
當前城市:shanghai
當前城市:shenzhen
空控制器和空操作還可以同時使用,用以完成更加復雜的操作。
空控制器Error是可以定義的
// 更改默認的空控制器名
'empty_controller' => 'MyError',
當找不到控制器的時候,就會定位到MyError控制器類進行操作。
文檔最后更新時間:2018-04-26 08:36:20
未解決你的問題?請到「問答社區」反饋你遇到的問題