laravel验证器Validator的封装使用


RestPasswdValidator
<?php
namespace App\Service;
use Illuminate\Support\Facades\Validator;
use App\Service\BaseValidator;


class RestPasswdValidator  extends  BaseValidator{

    public $validatorsMessage;
    public $rules;
    public $message;
    protected $data;
    public $validator;

    public function __construct()
    {
        call_user_func_array([$this,'validator_rules'],[]);
    }

    public function validator_rules(){
        //验证规则
        $this->rules = [
            'mobile' => 'required',
            'password' => 'required|min:6|max:16',
            'code' => 'required',
        ];

        $this->message = LangConfig('AuthMobileLoginValidator');

    }

    /**
     * 处理返回的data字段
     * @return mixed
     */
    public function setFields(){

        array_walk_recursive($this->data,function(&$val,$key){
            $val = trim($val);
        });
    }

    /**
     * 验证码器钩子
     */
    public function hookAfter(){

        if (!preg_match_all("/^1[3456789]\d{9}$/", trim(request()->input('mobile')))) {
            $this->hookList = ['filed'=>'mobile','message'=>LangConfig('MobileFormatError')];
        }

    }


}

  

    'AuthMobileLoginValidator'=>[
        'mobile.required' => '手机号必填',
        'password.required'  => '密码必填',
        'password.min'  => '密码最少6位',
        'password.max'  => '密码最多16位',
        'code.required'=>'短信验证码必填',
    ],

  

 

BaseValidator

 

<?php
namespace App\Service;
use Illuminate\Support\Facades\Validator;



abstract class BaseValidator {

    public $validatorsMessage;
    public $rules;
    public $message;
    protected $data;
    public $validator;
    public $hookList = [];

    /*
     * 实现validator_rules
     * rule规则
     */
    abstract  public function validator_rules();

    /**
     * 处理返回的data字段
     * @return mixed
     */
    abstract  public function setFields();

    /**
     * @param $requestData
     * 验证数据合法性
     */
    public function make($requestData){
        $this->data = $requestData;
        $this->validator = Validator::make($requestData, $this->rules,$this->message);
        $this->hook();
    }

    public function hook(){
        call_user_func_array([$this,'hookAfter'],[]);
        $this->validator->after(function($validator){
            if(!empty($this->hookList)){
                $validator->errors()->add($this->hookList['filed'],$this->hookList['message']);
            }
        });
    }

    /**
     * 获取验证消息
     * @return bool|mixed
     */
    public function getMessage(){
        if($this->validator->fails() > 0){
            $messages = $this->validator->errors();
            return [0,$messages->first()];
        }else{
            return [1,'ok'];
        }
    }

    /*
     *返回处理过后的数据
     */
    public function getData(){
        call_user_func_array([$this,'setFields'],[]);
        return $this->data;
    }
}

  

控制器中使用

//验证数据合法性
            $rule = new RestPasswdValidator();
            $rule->make($request->only("mobile","password","code"));
            list($err_code,$err_smg) = $rule->getMessage();
            if(!$err_code){
                throw new UserApiException($err_smg,501);
            }
            $data = $rule->getData();

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM