找回密码
 免费注册

[开发笔记] 2.4新增DcFormValidate函数动态获取表单字段定义的验证规则

[复制链接]
admin 发表于 2022-11-10 16:23:36 | 显示全部楼层 |阅读模式
2.4新增DcFormValidate函数动态获取表单字段定义的验证规则,支持验证场景
  1. $fields = DcFormItems([
  2.     'user_name' => [
  3.         'order'           => 0,
  4.         'type'            => 'text',
  5.         'value'           => $data['user_nice_name'],
  6.         'required'        => true,
  7.         'disabled'        => true,
  8.         'maxlength'       => 30,
  9.         'validate'        => 'require|length:0,30',
  10.         'scene'           => 'save',
  11.     ],
  12.     'user_tag' => [
  13.         'order'           => 0,
  14.         'type'            => 'text',
  15.         'value'           => $data['user_tag'],
  16.         'maxlength'       => 60,
  17.         'validate'        => 'require',
  18.         'scene'           => 'save,update',
  19.     ],
  20.     'user_sign' => [
  21.         'order'           => 0,
  22.         'type'            => 'text',
  23.         'value'           => $data['user_sign'],
  24.         'maxlength'       => 120,
  25.         'validate'        => 'require',
  26.         'scene'           => 'save,update,reister',//多个用逗号分隔
  27.     ],
  28. ]);
  29. //返回所有表单验证规则
  30. $rulesAll = DcFormValidate($fields);
  31. //返回验证场景为update的表单验证规则
  32. $ruleUpdate = DcFormValidate($fields,'update');
  33. //表单验证所有规则
  34. $validate = new \think\Validate($rulesAll);
  35. dump($validate->check($data));
  36. //表单验证UPDATE场景
  37. $validate = new \think\Validate($ruleUpdate);
  38. dump($validate->check($data));
复制代码

回复

使用道具 举报

 楼主| admin 发表于 2022-11-10 16:53:51 | 显示全部楼层
使用闭包方式验证(未预先定义好验证器的时候方便使用,可替代自定义验证规则)

  1. $validate = new \think\Validate([
  2.     'user_slug' => function($value,$data) {
  3.         return $this->unique('user_slug', $value, $data);
  4.     },
  5.     'user_nice_name' => function($value,$data) {
  6.         return $this->unique('user_nice_name', $value, $data);
  7.     },
  8. ],$data,$field);
复制代码


回复

使用道具 举报

 楼主| admin 发表于 2022-11-10 16:55:07 | 显示全部楼层
如果没有使用验证器类,则支持使用extend方法扩展验证规则

  1. $validate = new Validate(['name' => 'checkName:1']);
  2. $validate->extend('checkName', function ($value, $rule, $data, $field, $title) {
  3.     return $rule == $value ? true : '名称错误';
  4. });
  5. $data   = ['name' => 1];
  6. $result = $validate->check($data);
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|Archiver|手机版|小黑屋|信息共享网

GMT+8, 2024-5-16 06:18 , Processed in 0.084828 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表