您现在的位置是:首页 > thinkphp6教程thinkphp6教程

thinkphp6验证规则失效 thinkphp6Validate验证器使用方法注意事项

上善若水2020-07-17 15:06:55【thinkphp6教程】 6215人已围观

简介今天在使用thinkphp6验证规则时遇到一些坑,导致验证规则始终无法生效,要不就重复验证,要不就验证失效简直心态爆炸,可能是自己用法不正确吧,来看看使用心得吧. 首先来看看正确的验证写法class

今天在使用thinkphp6验证规则时遇到一些坑,导致验证规则始终无法生效,要不就重复验证,要不就验证失效简直心态爆炸,可能是自己用法不正确吧,来看看使用心得吧.

首先来看看正确的验证写法

class CollectTask extends Validate
{
    protected $rule = [
        'name|采集任务名' => 'require|unique:collect_task|max:255',
        'urls|采集任务列表' => 'require',
    ];
    protected $scene = [
        'add_type1'   => ['name','urls'],
        'edit'   => ['name'],
    ];

    public function sceneEditType1()
    {
        return $this->only(['name',  'urls'])
            ->remove('name',  'unique|max:255');
    }
}

这里name|采集任务名这种写法就是相当于给name起了一个中文名用于验证显示,就可以不用再定义类似消息规则,唯一的缺陷就是这样写就不能国际化了.

protected $message  =   [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',
    ];

验证添加

$v=new \app\admin\validate\collect\CollectTask();
if (!$v->scene('add_type1')->check($data)) {
    echo $->getError();
}

验证编辑

$v=new \app\admin\validate\collect\CollectTask();
if (!$v->scene('editType1')->check($data)) {
    echo $->getError();
}

以上为正确写法,说下我这里遇到的坑..
我将这里的规则写成$v->scene('edit_type1')->check($data)

这里应该是驼峰写法,写成下划线后竟然还能验证,是验证的全字段,我当时就以为是用下线写法,实际上的用驼峰写法,不然会验证全部,这里按道理没找到验证场景应该就不验证,结果非得验证全字段,导致排斥错误用了很久.

第二个坑就是remove()的用法,官方文档有说明.
如果对同一个字段进行多次规则补充(包括移除和追加),必须使用下面的方式:

remove('field', ['rule1','rule2'])
// 或者
remove('field', 'rule1|rule2')

下面的方式会导致rule1规则remove不成功

remove('field', 'rule1')
->remove('field', 'rule2')

奇怪的写法,但是还得遵循,(官方验证器传送门)[https://www.kancloud.cn/manual/thinkphp6_0/1037627]

很赞哦! (40)

相关文章

文章评论

站点信息

  • 建站时间:2019-10-24
  • 网站程序:Thinkphp6 Layui
  • 文章统计247篇文章
  • 标签管理标签云
  • 统计数据cnzz统计
  • 微信公众号:扫描二维码,关注我们