- 首先我们在控制器里建一个 base.php 基类

- 然后我们引入Controller Validate Request 这些类,之后让他去继承 Controller
- 下来我们定义一些属性,这里说一下 $rules
- 一层 Index 是控制器下 模块名称
- 二层 index 是 模块里的 方法名称
- 三层的 page sv|搜索值,都为该方法里从前端接收的 参数名称,它对应的值就是我们想要对参数做的验证
<?php
namespace app\index\controller;
use think\Controller;
use think\Validate;
use think\Request;
class Base extends Controller{
protected $req;
protected $validater;
protected $params;
protected $rules = array(
'Index' => array(
'index' => array(
'page' => ['alphaNum'],
'sv|搜索值' => ['alphaDash'],
),
'welcome'=> array(),
'cannot_find'=> array()
),
);
public function __construct(){
parent::__construct();
$this->req = Request::instance();
$this->params = $this->checkParams($this->req->param(true));
}
protected function checkParams($arr)
{
$controller=$this->req->controller();
$action=$this->req->action();
$rule = $this->rules[$controller][$action];
$this->validater = new Validate($rule);
if (!$this->validater->check($arr)) {
$this->returnMsg(1, $this->validater>getError());
}
return $arr;
}
public function returnMsg($code,$msg = '',$data= []){
$return_data['code'] = $code;
$return_data['msg'] = $msg;
$return_data['data'] = $data;
echo json_encode($return_data);die;
}
}
- 下来我们再写一个 checkParams() 方法
- 方法里调用 $rule 属性,来找到我们对当前 控制器 和 方法 规定的 验证规则
- 通过验证就输出参数,不通过就抛出异常
- 那么它是怎么实现每次都首先验证参数呢?
- 在 function __construct(){} 构造函数里调用 checkParams() 就ok
- 那别的控制器怎么接收 验证后的参数呢?
- 上面我们把验证合格的参数 放在了 $this->params里,我们把当前控制器继承 base 控制器 就接收到参数了
<?php
namespace app\index\controller;
class Index extends Base{
public function index() {
$name = $this->params["参数名"];
}
}