位置:  首页 -> 编程语言 -> PHP -> TP5 -> tp5 Validate验证的使用(实战)

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;
    }
}    

  • 那别的控制器怎么接收 验证后的参数呢?
  • 上面我们把验证合格的参数 放在了 $this->params里,我们把当前控制器继承 base 控制器 就接收到参数了
  • namespace app\index\controller;
    
    class Index extends Base{
        public function index() {  
        	$name = $this->params["参数名"];
        }
    }
    


    到底了 2

    相关阅读