# 快速入門(十三):初始化、前置和后置操作
本章的內(nèi)容講解了如何在ThinkPHP控制器的操作方法調(diào)用之前或者之后做一些額外的操作,涉及到的知識點(diǎn)包括初始化操作、前置和后置操作。
## 初始化操作
如果要在控制器的任何操作方法之前都執(zhí)行某個(gè)方法的話,可以使用下面的方式:
~~~
namespace Home\Controller;
use Think\Controller;
class?IndexController?extends?Controller{
????// 初始化方法
????public?function?_initialize(){
????????echo?'initialize<br/>';
????}
????public?function?index(){
????????echo?'index';
????}
????public?function?hello(){
????????echo?'hello';
????}
}
~~~
如果我們訪問 `http://serverName/index.php/Home/index/index`
結(jié)果會輸出
~~~
initialize
index
~~~
如果我們訪問 `http://serverName/index.php/Home/index/hello`
結(jié)果會輸出
~~~
initialize
hello
~~~
可以看出,無論是執(zhí)行index操作還是hello操作 都會首先執(zhí)行`_initialize`操作方法。
如果把`_initialize`操作方法定義到一個(gè)公共的控制器類里面的話,那么所有的控制器操作方法之前都會執(zhí)行。
## 前置和后置操作
`_initialize`方法是調(diào)用所有操作方法之前都會執(zhí)行,前置和后置操作則是針對某個(gè)特定的操作方法而言。
如果當(dāng)前訪問的操作是存在(必須是實(shí)際在控制器中定義過)的,系統(tǒng)會檢測當(dāng)前操作是否具有前置和后置操作,如果存在就會按照順序執(zhí)行,前置和后置操作的方法名是在要執(zhí)行的方法前面加 `_before_`和`_after_`,例如:
~~~
namespace Home\Controller;
use Think\Controller;
class?IndexController?extends?Controller{
????//前置操作方法
????public?function?_before_index(){
????????echo?'before<br/>';
????}
????public?function?index(){
????????echo?'index<br/>';
????}
????//后置操作方法
????public?function?_after_index(){
????????echo?'after';
????}
}
~~~
如果我們訪問 `http://serverName/index.php`
結(jié)果會輸出
~~~
before
index
after
~~~
對于任何操作方法我們都可以按照這樣的規(guī)則來定義前置和后置方法。
如果在操作方法里面使用了exit或者error方法的話 有可能不會再執(zhí)行后置方法了,例如:
~~~
namespace Home\Controller;
use Think\Controller;
class?IndexController?extends?Controller{
????//前置操作方法
????public?function?_before_index(){
????????echo?'before<br/>';
????}
????public?function?index(){
????????echo?'index<br/>';
exit;
????}
????//后置操作方法
????public?function?_after_index(){
????????echo?'after';
????}
}
~~~
如果我們再次訪問結(jié)果會輸出
~~~
before
index
~~~
> 除了初始化、前置和后置操作之外,我們還可以在控制器以外的地方對操作方法進(jìn)行擴(kuò)展,這個(gè)以后會在行為擴(kuò)展部分描述。
- 快速入門 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:自動驗(yàn)證
- 快速入門 20:自動完成
