# 控制器定义
首先找到我们要操作的模块 在模块下找到相应的 Controller 目录 创建一个你控制器的名称 所有控制器名称全部首大写。
示例目录:App\Src\Lib\App\Home
控制器我们定义了前后置及当前前后置方法,如果没有需要,可以不用写前后置方法
### 1.创建文件
~~~
vi Index.php
~~~
### 2.空间命名
注意入口文件定义的 TOP_NAME 常量 如果你入口定义的 TOP_NAME 值为 APP 那么你创建命名空间如下
~~~
namespace App\Home\Controller;
~~~
### 3.创建类
类名首字母大写 继承 use HF\Core\Controller;
~~~
class Index extends Controller {
}
~~~
### 4.创建访问方法
所有外部访问方法必须前置添加 action 前小后大的驼峰写法 外部访问地址 home/index/mail
~~~
public function actionMail() {
}
~~~
### 5.创建内置方法(外部无法访问)
所有内部方法均不添加action
~~~
public function mail() {
}
~~~
### 6.默认前置方法
前置方法是为了在访问此方法之前操作一些想要操作的事情
~~~
public function _beforeHandle() {
//继承父类 _beforeHandle();
parent::_beforeHandle();
//做你该做的事
}
~~~
### 7.默认后置方法
后置方法是为了在访问完主体方法后的一些操作
~~~
public function _afterHandle() {
//继承父类 _afterHandle();
parent::_afterHandle();
//做你该做的事
}
~~~
### 8.当前方法前置方法
当前前置方法意思是你访问某个方法前将要执行的方法,此方法不是 _beforeHandle() 方法,比如你访问 Index 方法,且有额外定义了一个此方法的前置方法 ,那么在访问Index 方法前将执行 此方法专属的前置方法
~~~
//定义一个Db的专属于前置方法
public function _beforeDb() {
echo 1;
}
//定义一个普通外部Db方法
public function actionDb() {
echo 2;
}
~~~
外部访问 home/index/db 将输出 1 2;
### 9.当前方法后置方法
当前前置方法意思是你访问某个方法之后将要执行的方法,此方法不是 _afterHandle() 方法,比如你访问 Index 方法,且有额外定义了一个此方法的后置方法 ,那么在访问Index 方法完成后将执行 此方法专属的后置方法
~~~
//定义一个普通外部Db方法
public function actionDb() {
echo 2;
}
//定义一个Db的专属于后置方法
public function _afterDb() {
echo 3;
}
~~~
外部访问 home/index/db 将输出 2 3;
### 10.一个完整的类方法
~~~
namespace App\Home\Controller;
use HF\Core\Controller;
class Index extends Controller {
//默认前置方法
publice function _beforeHandl() {
parent::_beforeHandle();
}
//主体前置方法
publice function _beforeIndex(){
}
//主体方法
publice function actionIndex() {
}
//非外部访问方法
publice function default() {
}
//主体后置方法
publice function _afterIndex(){
}
//默认后置方法
publice function _afterHandl() {
parent::_afterHandle();
}
}
~~~