讨论 技术讨论 ModStartBlog数据表单如何自定义验证规则?

ModStartBlog数据表单如何自定义验证规则?

sigool 发表于    阅读:47    回复:1

问题描述:

ModStartBlog数据表单如何自定义验证规则?

环境信息:

用的是: ModStartBlog 稳定版 v10.0.0       PHP:7.0.9 版本

分享:

modstart默认快捷设置验证规则的函数只有这几个,如果我们想实现更加复杂的验证逻辑就要自定义验证规则了。


如图,value数据项使用自定义验证规则校验,需要我们通过rules函数传入,传入的参数为自定义验证规则的名字。接下来我们参照laravel文档定义一个名为 check_cfg_value  的验证规则就可以了。

那我们定义这个check_cfg_value的验证规则,在哪里定义好呢?比如我想在modstart渲染的新增或者编辑页面,填写完数据后,提交到后台的这次请求,在这个请求modstart会对我们的数据进行表单验证,那在该次请求我们赶在数据表单验证之前就定义就合乎情理了,不会报错了。

像我,我用的是modstart的数据快速CRUD,然后我用了 $builder->mode() == AdminCRUDBuilder::MODE_FORM 判断是否编辑或者新增进入的, 因为快捷crud功能这个crud函数,不单新增,编辑会执行,详情列表也会进入的。

然后还用了 Request::isPost() 判断当次请求是新增数据或者编辑数据 post提交,具体实现:

根据laravel5.1  自定义验证规则 这部分文档我们可知,定义一个自定义验证规则逻辑,我们用Validator::extend(),但是我用的是Validator::extendImplicit(),涉及区别就是如下文档所说:

因为我想不管value数据项提交的值是否为laravel验证规则定义的“空”都校验,所以选择了用extendImplicit(所以也可以看到我value数据项写验证规则的时候是没有添加required的)。

从我的示例代码可知,我想实现value数据项根据type数据项的值不同实现不同的逻辑校验。对于Validator::extend和Validator::extendImplicit()传入的匿名函数,这个匿名函数返回值我们返回true,false就可以了。true代表验证通过,false则laravel知道这个规则验证不通过。

验证判断逻辑我们实现了,至于错误提示呢?

我们赶在这个匿名返回前,用 $validator->setCustomMessages() 可以了,setCustomMessages()传入一个数组,这个数组代表要扩充的自定义验证规则message(写在配置文件也可以,不过写死在配置文件就没我这么灵活了),像我扩展了一个message,即 value属性的check_cfg_value规则。这样匿名函数回调返回false后续,laravel就能从我们提前定义的自定义验证规则找到对应这条规则验证不通过的错误提示了。

这里错误信息我们还用了 :attribute 占位, 这个  :attribute  代表的值就是

这些label参数值,modstart调用框架表单验证时,构造的验证器,传入的验证规则,数据,属性,错误信息提示时,属性用的就是这个label的值


评论
ModStart 官方

 
1
我来评论
QQ
微信
客服

.