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