find(); $name = $info->name; $appname = app('http')->getName();// 获取应用名 $classname = self::getCamel($info->name);//获取类名 $dirname = $info->dirname;// 文件保存位置 if(!empty($dirname)){ $path = root_path()."app".DS.$appname.DS."validate".DS.$dirname.DS; }else{ $path = root_path()."app".DS.$appname.DS."validate".DS; } $filename = $path.$classname.'.php'; if(file_exists($filename)){ @unlink($filename); } } /** * @title: 生成验证器代码 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-23 17:26:09 */ static public function createValidateFile(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $name = $info->name; $dirname = self::parseDirname($info->dirname);// 文件保存位置 $fileTitle = self::createTitle($info->title);//生成文件注释 $fieldList = ModelFields::where('model_name',$name)->where('status',1)->select()->toArray();//获取字段列表 $classname = self::getCamel($info->name);//获取类名 $appname = app('http')->getName();// 获取应用名 $rule = self::createRule($fieldList); $message = self::createMessage($fieldList); if(!empty($dirname)){ $path = root_path()."app".DS.$appname.DS."validate".DS.$dirname.DS; $namespace = "app\\$appname\\validate\\".str_replace('/','\\',$dirname); }else{ $path = root_path()."app".DS.$appname.DS."validate".DS; $namespace = "app\\$appname\\validate"; } if(!is_dir($path)){ mkdir($path,0777,true); } $filename = $path.$classname.'.php'; $content = <<\"$rule\",\n"; } } $str = rtrim($str,",\n")."\n\t];"; return $str; } /** * @title: 创建验证提示信息 * @desc: 描述 * @param {array} $fieldList * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-19 16:14:46 */ static public function createMessage(array $fieldList) { $str = "protected \$message =[\n"; foreach($fieldList as $item){ $field = $item['field']; $rule = $item['rule']; $title = $item['title']; if(!empty($rule) && !in_array($item['field_type'],['user_auto','org_auto'])){ $ruleList = explode('|',$rule); foreach($ruleList as $ruleItem){ $msg = ""; if(false!==strpos($ruleItem,':')){ $ruleItemArr = explode(':',$ruleItem); $key = $ruleItemArr[0]; $val = $ruleItemArr[1]; switch($key){ case 'min': $msg = $title."不能少于{$val}个字符";break; case 'max': $msg = $title."最多不能超过{$val}个字符";break; case 'between': $range = explode(',',$val); $min = $range[0]; $max = $range[1]; $msg = $title."只能在{$min}-{$max}之间"; break; case 'dateFormat': $msg = $title."不是指定格式的时间";break; case 'in': $arr = explode(',',$val); $msg = $title."不是"; foreach($arr as $in){ $msg .= $in.','; } $msg = rtrim($msg,',')."中的一个"; break; case 'notIn': $arr = explode(',',$val); $msg = $title."不能是"; foreach($arr as $in){ $msg .= $in.','; } $msg = rtrim($msg,',')."中的一个"; break; case 'notBetween': $range = explode(',',$val); $min = $range[0]; $max = $range[1]; $msg = $title."不能在{$min}-{$max}之间"; break; case 'length': $range = explode(',',$val); if(count($range)==2){ $min = $range[0]; $max = $range[1]; $msg = $title."长度只能在{$min}-{$max}之间"; }elseif(count($range)==1){ $len = $range[0]; $msg = $title."长度至能是{$len}个字符"; } break; case 'after': $msg = $title."必须在{$val}之后";break; case 'before': $msg = $title."必须在{$val}之前";break; case 'expire': $range = explode(',',$val); $min = $range[0]; $max = $range[1]; $msg = $title."必须在{$min}和{$max}之间"; break; case 'allowIp': $msg = $title."必须在这些范围内{$val}";break; case 'denyIp': $msg = "您的IP禁止访问";break; case 'confirm': $msg = $title."的值与{$val}不一致";break; case 'different': $msg = $title."的值不能与{$val}一致";break; case 'eq': case 'same': case '=': $msg = $title."必须等于$val";break; case 'egt': case '>=': $msg = $title."必须大于或等于$val";break; case 'gt': case '>': $msg = $title."必须大于$val";break; case 'elt': case '<=': $msg = $title."必须小于或等于$val";break; case 'lt': case '<': $msg = $title."必须小于$val";break; case 'filter': case 'regex': $msg = $title."验证未通过";break; } $str.="\t\t'$field.$key'=>'$msg',\n"; }else{ switch($ruleItem){ case 'require': $msg = $title."不能为空";break; case 'number': $msg = $title."必须是纯数字";break; case 'email': $msg = $title."邮箱格式错误";break; case 'integer': $msg = $title."必须为整数";break; case 'float': $msg = $title."必须为浮点数";break; case 'boolean': case 'bool': $msg = $title."必须为布尔值";break; case 'array': $msg = $title."必须为数组";break; case 'accepted': $msg = $title."的值必须为yes或on或1";break; case 'date': $msg = $title."必须为有效的日期";break; case 'alpha': $msg = $title."必须为纯字母";break; case 'alphaNum': $msg = $title."必须为字母或数字";break; case 'chs': $msg = $title."必须为汉字";break; case 'chsAlpha': $msg = $title."只能是汉字、字母";break; case 'chsAlphaNum': $msg = $title."只能是汉字、字母和数字";break; case 'chsDash': $msg = $title."只能是汉字、字母、数字和下划线_及破折号-";break; case 'cntrl': $msg = $title."只能是控制字符(换行、缩进、空格)";break; case 'graph': $msg = $title."只能是可打印字符(空格除外)";break; case 'print': $msg = $title."只能是可打印字符";break; case 'lower': $msg = $title."只能是小写字母";break; case 'upper': $msg = $title."只能是大写字母";break; case 'space': $msg = $title."只能是空白字符(包括缩进、垂直制表符、换行符、回车和换页字符)";break; case 'xdigit': $msg = $title."只能是十六进制字符";break; case 'activeUrl': $msg = "不是有效的$title";break; case 'url': $msg = "不是有效的$title";break; case 'ip': $msg = "不是有效的$title";break; case 'mobile': $msg = "不是有效的".$title;break; case 'idCard': $msg = "不是有效的".$title;break; case 'macAddr': $msg = "不是有效的".$title;break; case 'zip': $msg = "不是有效的".$title;break; } $str.="\t\t'$field.$ruleItem'=>'$msg',\n"; } } } } $str = rtrim($str,",\n")."\n\t];"; return $str; } }