## 验证场景
验证器重支持定义场景,并且验证不同场景的数据,例如:
~~~
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'
});
}
}
~~~
然后可以在验证方法中制定验证的场景
~~~
$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')
}
}
~~~
>[danger] `setSceneName`验证场景在调用`check`方法以后会被重置,并不会对下一次`check`生效
主要方法说明如下:
| 方法名 | 描述 |
| --- | --- |
| only | 场景需要验证的字段 |
| remove | 移除场景中的字段的部分验证规则 |
| append | 给场景中的字段需要追加验证规则 |