# 验证场景

验证器重支持定义场景,并且验证不同场景的数据,例如:






















 
 
 
 
 



class ArticleValidate extends Validate
{
    constructor()
    {
        const rules = {
            'id'       : 'require|number',
            'content'  : 'require|length:1,2000',
            'title'    : 'require|chsDash|length:4,50'
        }

        const message = {
            'id.require'      : '缺少参数:文章Id',
            'id.number'       : '参数错误:文章Id',
            'content.require' : '文章内容必须填写',
            'content.length'  : '文章长度为1~2000个字符',
            'title.require'   : '文章标题必须填写',
            'title.chsDash'   : '文章标题格式错误',
            'title.length'    : '文章标题长度为4~50个字符',
        }
        super(rules,message);
		
        this.setScene({
            'add' : 'content,title',
            'edit': 'id,content,title',
            'del' : 'id'
        });
    }
}

也可以使用如下写法:



















 
 
 
 
 


class ArticleValidate extends Validate
{
    rule = {
        'id'       : 'require|number',
        'content'  : 'require|length:1,2000',
        'title'    : 'require|chsDash|length:4,50'
    }

    msg = {
        'id.require'      : '缺少参数:文章Id',
        'id.number'       : '参数错误:文章Id',
        'content.require' : '文章内容必须填写',
        'content.length'  : '文章长度为1~2000个字符',
        'title.require'   : '文章标题必须填写',
        'title.chsDash'   : '文章标题格式错误',
        'title.length'    : '文章标题长度为4~50个字符',
    }

    scene = {
        'add' : 'content,title',
        'edit': 'id,content,title',
        'del' : 'id'
    }
}

然后可以在验证方法中制定验证的场景







 




$data = {
    'content' : '文章内容',
    'title'   : '文章标题'
};

const Article = new ArticleValidate();
if(!Article.setSceneName('add').check($data)){
    console.log(Article.getError())
}

# 自定义验证场景

可以单独为某个场景定义方法(方法的命名规范是scene+场景名),并且对某些字段的规则重新设置,例如:

  • 注意:场景名不区分大小写,且在调用的时候不能将驼峰写法转为下划线
class ArticleValidate extends Validate
{
    constructor()
    {
        const rules = {
            'id'       : 'require|number',
            'content'  : 'require|length:1,2000',
            'title'    : 'require|chsDash|length:4,50'
        }

        const message = {
            'id.require'      : '缺少参数:文章Id',
            'id.number'       : '参数错误:文章Id',
            'content.require' : '文章内容必须填写',
            'content.length'  : '文章长度为1~2000个字符',
            'title.require'   : '文章标题必须填写',
            'title.chsDash'   : '文章标题格式错误',
            'title.length'    : '文章标题长度为4~50个字符',
        }
        super(rules,message);
    }

    sceneEdit(){
        return this.only(['id','content','title'])
            .append('id','max:10000')
            .remove('content','length')
            .remove('title',null)
            .append('title','require|chsDash|length:4,50')
    }
}

说明

setSceneName验证场景在调用check方法以后会被重置,并不会对下一次check生效

主要方法说明如下:

方法名 描述
only 场景需要验证的字段
remove 移除场景中的字段的部分验证规则
append 给场景中的字段需要追加验证规则