TP5.1 用validate的__construct来偷懒
表单太长,字段太多,差点验证写哭,那么,懒人拯救世界。
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
$field = [
'name' => '名称',
'age' => '年龄',
'email' => '邮箱',
];
对应的格式
源码的
__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;
}
}