SystemUserValidate.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\validate\system;
  8. use think\Validate;
  9. use plugin\saiadmin\app\model\system\SystemUser;
  10. /**
  11. * 用户信息验证器
  12. */
  13. class SystemUserValidate extends Validate
  14. {
  15. /**
  16. * 定义验证规则
  17. */
  18. protected $rule = [
  19. 'username' => 'require|max:16|unique:'.SystemUser::class,
  20. 'password' => 'require|min:6|max:16',
  21. 'role_ids' => 'require',
  22. ];
  23. /**
  24. * 定义错误信息
  25. */
  26. protected $message = [
  27. 'username.require' => '用户名必须填写',
  28. 'username.max' => '用户名最多不能超过16个字符',
  29. 'username.unique' => '用户名不能重复',
  30. 'password.require' => '密码必须填写',
  31. 'password.min' => '密码最少为6位',
  32. 'password.max' => '密码长度不能超过16位',
  33. 'role_ids' => '角色必须填写',
  34. ];
  35. /**
  36. * 定义场景
  37. */
  38. protected $scene = [
  39. 'save' => [
  40. 'username',
  41. 'password',
  42. 'role_ids',
  43. ],
  44. 'update' => [
  45. 'username',
  46. 'role_ids',
  47. ],
  48. ];
  49. /**
  50. * 验证是否唯一
  51. * @access public
  52. * @param mixed $value 字段值
  53. * @param mixed $rule 验证规则 格式:数据表,字段名,排除ID,主键名
  54. * @param array $data 数据
  55. * @param string $field 验证字段名
  56. * @return bool
  57. */
  58. public function unique($value, $rule, array $data = [], string $field = ''): bool
  59. {
  60. if (is_string($rule)) {
  61. $rule = explode(',', $rule);
  62. }
  63. if (str_contains($rule[0], '\\')) {
  64. // 指定模型类
  65. $db = new $rule[0];
  66. } else {
  67. return false;
  68. }
  69. $key = $rule[1] ?? $field;
  70. $map = [];
  71. if (str_contains($key, '^')) {
  72. // 支持多个字段验证
  73. $fields = explode('^', $key);
  74. foreach ($fields as $key) {
  75. if (isset($data[$key])) {
  76. $map[] = [$key, '=', $data[$key]];
  77. }
  78. }
  79. } elseif (strpos($key, '=')) {
  80. // 支持复杂验证
  81. parse_str($key, $array);
  82. foreach ($array as $k => $val) {
  83. $map[] = [$k, '=', $data[$k] ?? $val];
  84. }
  85. } elseif (isset($data[$field])) {
  86. $map[] = [$key, '=', $data[$field]];
  87. }
  88. $pk = !empty($rule[3]) ? $rule[3] : $db->getPk();
  89. if (is_string($pk)) {
  90. if (isset($rule[2])) {
  91. $map[] = [$pk, '<>', $rule[2]];
  92. } elseif (isset($data[$pk])) {
  93. $map[] = [$pk, '<>', $data[$pk]];
  94. }
  95. }
  96. if ($db->where($map)->field($pk)->find()) {
  97. return false;
  98. }
  99. return true;
  100. }
  101. }