关于拦截器:
- 拦截器是在框架运行前以及业务处理完毕后进行拦截
- 拦截器可以用来处理权限,业务控制,访问日志等工作
- 拦截器分为preHandle 前置拦截器和postHandle 后置拦截器
拦截器的配置文件:
- $InitPHP_conf['interceptor']['path'] 是配置你的拦截器存放的文件夹目录
- $InitPHP_conf['interceptor']['postfix'] 拦截器文件和类的后缀名,例如testInterceptor.php
- $InitPHP_conf['interceptor']['rule'] 是拦截器规则,是一个数组形式,可以定义多个拦截器
- 'file' 是拦截器的名称,例如testInterceptor.php,则名称为test
- regular 是访问规则,如果都是*号则拦截所有的请求。如果需要拦截部分请求,可以通过正则的方式来配置。例如'c' => '/^(hello|test)$/' 则只能拦截请求中c参数为hello或者test的请求。
/*********************************拦截器配置*****************************************/
/**
* 拦截器配置
* rule是拦截器的配置规则,是一个数组的形式。
* 你可以定义多个拦截器。
*/
$InitPHP_conf['interceptor']['path'] = "web/interceptor"; //拦截器文件夹目录
$InitPHP_conf['interceptor']['postfix'] = "Interceptor"; //拦截器类和文件的后缀名
$InitPHP_conf['interceptor']['rule'] = array( //拦截器规则
'test' => array(
'file' => 'test', //文件名称 例如:testInterceptor,则file值为:test
'regular' => array(
'm' => '*',
'c' => '*',
'a' => '*'
)//正则表达式
)
);
具体实现:
- 需要实现接口类interceptorInterface 中的preHandle和postHandle两个方法
class testInterceptor implements interceptorInterface {
/**
* 前置拦截器,在所有Action运行全会进行拦截
* 如果返回true,则拦截通过;如果返回false,则拦截
* @return boolean 返回布尔类型,如果返回false,则截断
*/
public function preHandle() {
echo "preHandle";
return true;
}
/**
* 后置拦截器,在所有操作进行完毕之后进行拦截
*/
public function postHandle() {
echo "postHandle";
}
}