• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
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();

  

 

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/articles/11102694.html

posted on 2019-06-28 14:59  孙龙-程序员  阅读(1965)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3