User.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace app\admin\validate\shopro\user;
  3. use think\Validate;
  4. use think\Db;
  5. use think\Loader;
  6. use think\exception\ClassNotFoundException;
  7. class User extends Validate
  8. {
  9. protected $regex = [
  10. 'password' => '/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/',
  11. 'notPureNumber' => '^[a-zA-Z][a-zA-Z0-9_]{4,15}$',
  12. 'mobile' => '/^1[3456789]\d{9}$/',
  13. ];
  14. protected $rule = [
  15. 'username' => 'alphaDash|length:5,12|unique:user|regex:notPureNumber',
  16. 'nickname' => 'require|length:1,10',
  17. 'mobile' => 'regex:mobile',
  18. 'password' => 'length:6,16|regex:password',
  19. 'oldPassword' => 'require',
  20. 'newPassword' => 'require|length:6,16|regex:password',
  21. 'avatar' => 'require',
  22. 'email' => 'email|unique:user',
  23. 'code' => 'require',
  24. 'gender' => 'in:0,1'
  25. ];
  26. protected $message = [
  27. 'username.require' => '用户名必须填写',
  28. 'username.alphaDash' => '用户名只能包含字母,数字,_和-',
  29. 'username.length' => '用户名长度必须在 5-12 位',
  30. 'username.unique' => '用户名已被占用',
  31. 'username.regx' => '用户名需以字母开头',
  32. 'nickname.require' => '昵称必须填写',
  33. 'nickname.chsDash' => '昵称只能包含汉字,字母,数字,_和-',
  34. 'nickname.length' => '昵称长度必须在 2-10 位',
  35. 'mobile.require' => '手机号必须填写',
  36. 'mobile.regex' => '手机号格式不正确',
  37. 'mobile.unique' => '手机号已被占用',
  38. 'password.require' => '请填写密码',
  39. 'password.length' => '密码长度必须在 6-16 位',
  40. 'password.regx' => '密码必须包含字母和数字',
  41. 'oldPassword.require' => '请填写旧密码',
  42. 'newPassword.require' => '请填写新密码',
  43. 'newPassword.length' => '密码长度必须在 6-16 位',
  44. 'newPassword.regx' => '密码必须包含字母和数字',
  45. 'avatar.require' => '头像必须上传',
  46. 'email.email' => '邮箱格式不正确',
  47. 'email.unique' => '邮箱已被占用',
  48. 'code.require' => '请填写验证码',
  49. 'gender.in' => '请选择性别'
  50. ];
  51. protected $scene = [
  52. 'edit' => ['username', 'nickname', 'mobile', 'password', 'avatar', 'gender', 'email', 'status']
  53. ];
  54. /**
  55. * 验证是否唯一
  56. * @access public
  57. * @param mixed $value 字段值
  58. * @param mixed $rule 验证规则 格式:数据表,字段名,排除ID,主键名
  59. * @param array $data 数据
  60. * @param string $field 验证字段名
  61. * @return bool
  62. */
  63. public function unique($value, $rule, $data = [], $field = '')
  64. {
  65. if (is_string($rule)) {
  66. $rule = explode(',', $rule);
  67. }
  68. if (false !== strpos($rule[0], '\\')) {
  69. // 指定模型类
  70. $db = new $rule[0];
  71. } else {
  72. try {
  73. $db = Loader::model($rule[0]);
  74. } catch (ClassNotFoundException $e) {
  75. $db = Db::name($rule[0]);
  76. }
  77. }
  78. $key = $rule[1] ?? $field;
  79. $map = [];
  80. if (strpos($key, '^')) {
  81. // 支持多个字段验证
  82. $fields = explode('^', $key);
  83. foreach ($fields as $key) {
  84. if (isset($data[$key])) {
  85. $map[$key] = ['=', $data[$key]];
  86. }
  87. }
  88. } elseif (isset($data[$field])) {
  89. $map[$key] = ['=', $data[$field]];
  90. } else {
  91. $map = [];
  92. }
  93. $pk = !empty($rule[3]) ? $rule[3] : $db->getPk();
  94. if (is_string($pk)) {
  95. if (isset($rule[2])) {
  96. $map[$pk] = ['neq', $rule[2]];
  97. } elseif (isset($data[$pk])) {
  98. $map[$pk] = ['neq', $data[$pk]];
  99. }
  100. }
  101. if ($db->where($map)->field($pk)->find()) {
  102. return false;
  103. }
  104. return true;
  105. }
  106. }