TP5.1 用validate的__construct来偷懒

表单太长,字段太多,差点验证写哭,那么,懒人拯救世界。

$rule = [
    'name'  => 'require|max:25',
    'age'   => 'number|between:1,120',
    'email' => 'email',
];

$field = [
    'name'  => '名称',
    'age'   => '年龄',
    'email' => '邮箱',	
];

对应的格式 TP5.1 用validate的__construct来偷懒

源码的

__construct
 public function __construct(array $rules = [], array $message = [], array $field = [])
    {
        $this->rule    = $rules + $this->rule;
        $this->message = array_merge($this->message, $message);
        $this->field   = array_merge($this->field, $field);
    }

其实大部分都是require,没那么多讲究,那么

我就把数据库的字段名和备注给提取出来

public function Rules($table){
        $str=sprintf("SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='%s' AND table_schema='guanwang'",$table);
        $data=Db::query($str);
        $rule=[];
        $field=[];
        foreach ($data as $key=>$value){
            $field[$key]=$value['COLUMN_NAME'];
            $comment[$key]=$value['column_comment'];
        }
        unset($field[0]);
        unset($comment[0]);
        $res=array_combine($field,$comment);
        return $res;
    }

$comment是备注,用来填充$field。

然后完整代码

<?php
/**
 * Created by PhpStorm.
 * User: 74985
 * Date: 2018/12/17
 * Time: 12:47
 */

namespace app\common\validate;


use think\Validate;
use think\Db;
class Base extends Validate
{
    public function __construct(array $rules = [], array $message = [], array $field = [],string $table='')
    {
        $require=['require'];
        $rulesBefore=array_flip(array_keys($this->Rules($table)));
        $rules=$this->newArray($rulesBefore);
        $field=$this->Rules($table);
        parent::__construct($rules, $message, $field,$table);

    }

    public function Rules($table){
        $str=sprintf("SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='%s' AND table_schema='guanwang'",$table);
        $data=Db::query($str);
        $rule=[];
        $field=[];
        foreach ($data as $key=>$value){
            $field[$key]=$value['COLUMN_NAME'];
            $comment[$key]=$value['column_comment'];
        }
        unset($field[0]);
        unset($comment[0]);
        $res=array_combine($field,$comment);
        return $res;
    }
    public function newArray(array $arr){
            foreach ($arr as $key=>$v){
                $arr[$key]='require';
            }
            return $arr;
    }
}