<?php
/**
* * * * * * * *<4297088@qq.com>
* */
namespace cn\gz53\framework\sdk\validate;
use cn\gz53\framework\model\uo\validate\UtilDataUo;
use cn\gz53\framework\sdk\Sdk;
use cn\gz53\framework\utils\validator\BooleanValidatorUtil;
use cn\gz53\framework\utils\validator\LengthValidatorUtil;
use cn\gz53\framework\utils\validator\NumberValidatorUtil;
use cn\gz53\framework\utils\validator\RequiredValidatorUtil;
use cn\gz53\framework\utils\validator\ValidatorValidateUtilI;
use cn\gz53\framework\utils\validator\ValidatorNameUtilI;
class CommonValidateSdk extends Sdk
{
private $_pool = [];
public function init(CommonValidateInitSdkI $po){
$pool[] = RequiredValidatorUtil::getInstance($this->_context);
$pool[] = LengthValidatorUtil::getInstance($this->_context);
$pool[] = BooleanValidatorUtil::getInstance($this->_context);
$pool[] = NumberValidatorUtil::getInstance($this->_context);
foreach ($pool as $key => $util){
$this->setUtil($util, $util);
}
return true;
}
public function setValidator(CommonValidateValidatorSetSdkI $po){
$validatorList = $po->getValidatorList();
foreach ($validatorList as $key => $util){
$this->setUtil($util, $util);
}
return true;
}
public function validate(CommonValidateCheckSdkI $po){
$ruleList = $po->getValidateRules();
$valueList = $po->getValidateValues();
$fieldList = $this->parseRule($ruleList);
$valueList = $this->parseValue($valueList);
$resultList = $this->check($fieldList, $valueList);
$po->setValidateResults($resultList);
return true;
}
private function parseRule($ruleList){
$fieldList = [];
foreach ($ruleList as $key => $rule){
$fields_name = array_shift($rule);
$fieldList = explode(",", $fields_name);
$validateName = array_shift($rule);
$params = $rule;
foreach ($fieldList as $k => $field){
$fieldList[$field][$validateName] = $params;
}
}
return $fieldList;
}
private function parseValue($valueList){
return $valueList;
}
private function check($parseList, $valueList){
if(!is_array($parseList)){
return false;
}
$resultList = [];
foreach ($parseList as $field => $validate_list){
$resultList[$field] = [];
if(!is_array($validate_list)){
continue;
}
if(!isset($valueList[$field])){
continue;
}
foreach ($validate_list as $validate_name => $params){
$resultList[$field][$validate_name] = $this->valid($validate_name, $valueList[$field], $params);
}
}
return $resultList;
}
private function valid($validate_name, $value, $params){
$uo = UtilDataUo::getInstance($this->_context);
$uo->clear();
$uo->setValidateValue($value);
$uo->setValidateParams($params);
$util = $this->getUtil($validate_name);
if( $util == null){
return null;
}
$util->validate($uo);
return [
'status' => $uo->getValidateStatus(),
'code' => $uo->getValidateCode(),
'message' => $uo->getValidateMessage()
];
}
private function getUtil($validate_name) : ValidatorValidateUtilI{
return isset($this->_pool[$validate_name] ) ? $this->_pool[$validate_name] : null;
}
private function setUtil(ValidatorNameUtilI $nameUtil, ValidatorValidateUtilI $util){
$this->_pool[$nameUtil->getValidateName()] = $util;
}
}