# 快速入門(十二):空操作和空控制器
本章的內(nèi)容是講解下ThinkPHP控制器的兩個實用特性:空操作和空控制器,通??梢杂脕韺崿F(xiàn)一些錯誤頁面和URL優(yōu)化。
## 空操作
空操作是指系統(tǒng)在找不到請求的操作方法的時候,會定位到當前控制器的空操作(`_empty`)方法來執(zhí)行。
例如,下面我們用空操作功能來實現(xiàn)一個城市切換的功能。 我們只需要給CityController類定義一個`_empty`方法:
~~~
<?php
namespace Home\Controller;
use Think\Controller;
class CityController extends Controller{
public function _empty($name){
//把所有城市的操作解析到city方法
$this->city($name);
}
//注意 city方法 本身是 protected 方法
protected function city($name){
//和$name這個城市相關(guān)的處理
echo '當前城市' . $name;
}
}
~~~
接下來,我們就可以在瀏覽器里面輸入
~~~
http://serverName/index.php/Home/City/beijing/
http://serverName/index.php/Home/City/shanghai/
http://serverName/index.php/Home/City/shenzhen/
~~~
由于City控制器并沒有定義beijing、shanghai或者shenzhen操作方法,因此系統(tǒng)會定位到空操作方法 `_empty`中去解析,`_empty`方法的參數(shù)就是當前URL里面的操作名,因此會看到依次輸出的結(jié)果是:
~~~
當前城市:beijing
當前城市:shanghai
當前城市:shenzhen
~~~
> 注意:空操作方法僅在你的控制器類繼承系統(tǒng)的`Think\Controller`類才有效。
## 空控制器
空控制器的概念是指當系統(tǒng)找不到請求的控制器名稱的時候,系統(tǒng)會嘗試定位空控制器(`EmptyController`)。
現(xiàn)在我們把前面的需求進一步,把URL由原來的
`http://serverName/index.php/Home/City/shanghai/`
變成
`http://serverName/index.php/Home/shanghai/`
這樣更加簡單的方式,如果按照傳統(tǒng)的模式,我們必須給每個城市定義一個控制器類,然后在每個控制器類的index方法里面進行處理??墒侨绻褂每湛刂破鞴δ埽@個問題就可以迎刃而解了。
我們可以給項目定義一個EmptyController類
~~~
<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller{
public function index(){
//根據(jù)當前控制器名來判斷要執(zhí)行那個城市的操作
$cityName = CONTROLLER_NAME;
$this->city($cityName);
}
//注意 city方法 本身是 protected 方法
protected function city($name){
//和$name這個城市相關(guān)的處理
echo '當前城市' . $name;
}
}
~~~
接下來,我們就可以在瀏覽器里面輸入
~~~
http://serverName/index.php/Home/beijing/
http://serverName/index.php/Home/shanghai/
http://serverName/index.php/Home/shenzhen/
~~~
由于系統(tǒng)并不存在beijing、shanghai或者shenzhen控制器,因此會定位到空控制器(`EmptyController`)去執(zhí)行,會看到依次輸出的結(jié)果是:
~~~
當前城市:beijing
當前城市:shanghai
當前城市:shenzhen
~~~
空控制器和空操作還可以同時使用,用以完成更加復雜的操作。
- 快速入門 1:基礎(chǔ)
- 快速入門 2:CURD
- 快速入門 3:查詢語言
- 快速入門 4:連貫操作
- 快速入門 5:變量
- 快速入門 6:路由
- 快速入門 7:視圖
- 快速入門 8:變量輸出
- 快速入門 9:循環(huán)和控制輸出
- 快速入門 10:公共模板和模板布局
- 快速入門 11:Action參數(shù)綁定
- 快速入門 12:空操作和空控制器
- 快速入門 13:初始化、前置和后置操作
- 快速入門 14:頁面跳轉(zhuǎn)和重定向
- 快速入門 15:頁面請求和AJAX
- 快速入門 16:偽靜態(tài)
- 快速入門 17:操作綁定到類
- 快速入門 18:多層控制器
- 快速入門 19:自動驗證
- 快速入門 20:自動完成
