# 快速入門(十七):操作綁定到類
如果你的應(yīng)用規(guī)模比較大,每個(gè)操作方法彼此相對(duì)獨(dú)立,那么就可以嘗試下操作綁定到類的功能。
## 定義
系統(tǒng)提供了把每個(gè)操作方法定位到一個(gè)類的功能,可以讓你的開(kāi)發(fā)工作更細(xì)化,可以設(shè)置參數(shù)**ACTION_BIND_CLASS**,例如:
~~~
'ACTION_BIND_CLASS' => True,
~~~
設(shè)置后,我們的控制器定義有所改變,以URL訪問(wèn)為`http://serverName/Home/Index/index`為例,原來(lái)的控制器文件定義位置為:
~~~
Application/Home/Controller/IndexController.class.php
~~~
控制器類的定義如下:
~~~
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller{
public function index(){
echo '執(zhí)行Index控制器的index操作';
}
}
~~~
可以看到,實(shí)際上我們調(diào)用的是?`Home\Controller\IndexController`?類的**index**方法。
設(shè)置操作綁定到類以后,控制器文件位置改為:
~~~
Application/Home/Controller/Index/index.class.php
~~~
控制器類的定義如下:
~~~
namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
public function run(){
echo '執(zhí)行Index控制器的index操作';
}
}
~~~
現(xiàn)在,我們調(diào)用的其實(shí)是?`Home\Controller\Index\index`?類的**run**方法。
> 注意:操作方法類的命名空間比之前要多了一個(gè)控制器名稱,這個(gè)地方很容易忽略。
run方法依舊可以支持傳入?yún)?shù)和進(jìn)行Action參數(shù)綁定操作。
~~~
namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
public function run($name=''){
echo 'Hello,'.$name.'!';
}
}
~~~
我們?cè)L問(wèn)
~~~
http://serverName/Home/Index/index/name/thinkphp
~~~
可以看到輸出結(jié)果為:
Hello,thinkphp!
## 前置和后置操作
當(dāng)設(shè)置操作方法綁定到類后,前置和后置操作的定義有所改變,只需要在類里面定義`_before_run`和`_after_run`方法即可,例如:
~~~
namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
public function _before_run(){
echo 'before_'.ACTION_NAME;
}
public function run(){
echo '執(zhí)行Index控制器的index操作';
}
public function _after_run(){
echo 'after_'.ACTION_NAME;
}
}
~~~
## 空控制器
操作方法綁定到類后,一樣可以支持空控制器,我們可以創(chuàng)建?`Application/Home/Controller/_empty`目錄,即表示如果找不到當(dāng)前的控制器的話,會(huì)到_empty控制器目錄下面定位操作方法。
例如,我們?cè)L問(wèn)了URL地址?`http://serverName/Home/Test/index`,但并不存在?`Application/Home/Controller/Test`目錄,但是有定義?`Application/Home/Controller/_empty`目錄。
并且我們有定義:
~~~
Application/Home/Controller/_empty/index.class.php
~~~
控制器定義如下:
~~~
namespace Home\Controller\_empty;
use Think\Controller;
class index extends Controller{
public function run(){
echo '執(zhí)行'CONTROLLER_NAME.'控制器的'.ACTION_NAME.'操作';
}
}
~~~
訪問(wèn)`http://serverName/Home/Test/index`后 輸出結(jié)果顯示:
~~~
執(zhí)行Test控制器的index操作
~~~
## 空操作
操作綁定到類后,我們依然可以實(shí)現(xiàn)空操作方法,我們只要定義一個(gè)?`Home\Controller\Index\_empty`類,就可以支持Index控制器的空操作訪問(wèn),例如: 控制器定義如下:
~~~
namespace Home\Controller\Index;
use Think\Controller;
class _empty extends Controller{
public function run(){
echo '執(zhí)行Index控制器的'.ACTION_NAME.'操作';
}
}
~~~
當(dāng)我們?cè)L問(wèn)`http://serverName/Home/Index/test`后 輸出結(jié)果顯示:
~~~
執(zhí)行Index控制器的test操作
~~~
- 快速入門 1:基礎(chǔ)
- 快速入門 2:CURD
- 快速入門 3:查詢語(yǔ)言
- 快速入門 4:連貫操作
- 快速入門 5:變量
- 快速入門 6:路由
- 快速入門 7:視圖
- 快速入門 8:變量輸出
- 快速入門 9:循環(huán)和控制輸出
- 快速入門 10:公共模板和模板布局
- 快速入門 11:Action參數(shù)綁定
- 快速入門 12:空操作和空控制器
- 快速入門 13:初始化、前置和后置操作
- 快速入門 14:頁(yè)面跳轉(zhuǎn)和重定向
- 快速入門 15:頁(yè)面請(qǐng)求和AJAX
- 快速入門 16:偽靜態(tài)
- 快速入門 17:操作綁定到類
- 快速入門 18:多層控制器
- 快速入門 19:自動(dòng)驗(yàn)證
- 快速入門 20:自動(dòng)完成
