在ThinkPHP6中需创建继承think\Validate的验证器类,定义如passwordComplexity等自定义规则方法,接收$value、$rule、$data、$field四参数并返回布尔值或错误提示,再在$rule数组中以字符串形式引用该规则名,配合$message配置对应中文提示,最后通过实例化并调用check()方法执行验证。

你需要在ThinkPHP6中校验“密码必须包含大小写字母和数字”“手机号末四位不能是重复数字”这类框架默认不支持的业务规则,但直接往$rule里写字符串规则会报错或被忽略。
创建验证器类并继承Validate
在app/validate目录下新建文件,例如PasswordComplexityValidate.php。
文件开头必须声明命名空间并继承think\Validate类:namespace app\validate; use think\Validate;
类名必须首字母大写且与文件名一致,否则自动加载失败。
立即学习“PHP免费学习笔记(深入)”;
【类必须显式extends Validate,否则自定义规则方法不会被框架识别】
编写自定义规则方法
在验证器类内部,用public修饰符定义一个方法,方法名就是你后续要使用的规则名,比如passwordComplexity。
该方法必须接收四个参数:$value(当前字段值)、$rule(规则参数,如'8,1')、$data(全部提交数据)、$field(当前字段名)。
返回true表示通过,false或字符串表示失败;返回字符串时,框架会直接当作错误提示输出。
例如校验密码强度:
public function passwordComplexity($value, $rule, $data, $field) { if (!is_string($value)) return false; $hasUpper = preg_match('/[A-Z]/', $value); $hasLower = preg_match('/[a-z]/', $value); $hasDigit = preg_match('/\d/', $value); return $hasUpper && $hasLower && $hasDigit; }
在规则中调用自定义方法
将自定义规则名写入protected $rule数组,格式为'password' => 'require|passwordComplexity'。
注意:规则名必须与方法名完全一致,包括大小写;中间不能有空格,也不能加括号。
如果需要传参,用冒号分隔,例如'mobile' => 'require|noRepeatLastFour:4',此时$rule值就是'4'。
对应方法签名保持不变,$rule接收到的就是字符串'4',自行转换类型处理。
配置错误提示信息
在protected $message属性中添加对应提示,键名为字段名.规则名,例如'password.passwordComplexity' => '密码必须同时包含大写字母、小写字母和数字'。
若未定义该提示,框架会使用默认的“验证失败”字样,无法体现业务语义。
提示内容可含中文,无需urlencode,直接写入字符串即可。
启用并验证数据
第一步:实例化验证器,例如$v = new PasswordComplexityValidate();
第二步:调用check方法传入待验数据,例如$result = $v->check(['password' => 'Abc123']);
第三步:检查结果,失败时用$v->getError()获取具体提示。
这一步操作起来很简单,直接把数据数组传进去就行。
【未调用check()前,所有规则都不会触发,即使规则语法正确也不会报错】



















