tp5 Validate验证的使用(实战)
-
首先我们在控制器里建一个 base.php 基类
- 下来我们定义一些属性,这里说一下 $rules
- 一层 Index 是控制器下 模块名称
- 二层 index 是 模块里的 方法名称
- 三层的 page sv|搜索值,都为该方法里从前端接收的 参数名称,它对应的值就是我们想要对参数做的验证
- 下来我们再写一个 checkParams() 方法
- 方法里调用 $rule 属性,来找到我们对当前 控制器 和 方法 规定的 验证规则
- 通过验证就输出参数,不通过就抛出异常
- 那么它是怎么实现每次都首先验证参数呢?
- 在 function __construct(){} 构造函数里调用 checkParams() 就ok
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(); //3. 验证参数,返回成功过滤后的参数数组 $this->params = $this->checkParams($this->req->param(true)); } //检测客户端传递过来的其他参数(用户名,其他相关) /* param: $arr [] return: [合格的参数数组] */ protected function checkParams($arr) { //1.获取验证规则 (Array) $controller=$this->req->controller(); $action=$this->req->action(); $rule = $this->rules[$controller][$action]; //2. 验证参数并且返回错误 $this->validater = new Validate($rule); if (!$this->validater->check($arr)) { $this->returnMsg(1, $this->validater>getError()); } //3. 如果正常,就通过验证 return $arr; } /** * [ajax回调] * @return json */ public function returnMsg($code,$msg = '',$data= []){ $return_data['code'] = $code; $return_data['msg'] = $msg; $return_data['data'] = $data; echo json_encode($return_data);die; } }
namespace app\index\controller; class Index extends Base{ public function index() { $name = $this->params["参数名"]; } }
到底了
下一篇
2