Yii2模型自定义参数验证核心是重写rules()方法并结合自定义验证器(内联方法或独立类),支持客户端与服务端双校验,需掌握规则结构、验证器注册、错误提示及参数传递。

Yii2 中模型的自定义参数验证,核心是重写 rules() 方法并结合自定义验证器(可复用类或匿名函数),同时支持客户端 + 服务端双校验。关键在于理解验证规则结构、验证器注册方式、错误提示控制以及如何传参给验证逻辑。
基础:在 rules() 中定义自定义验证规则
Yii2 允许在 rules() 返回数组中使用字符串、数组或闭包形式注册验证器。最常用的是数组形式,指定字段、验证器类名(或内置别名)、附加选项:
-
字段名:要验证的属性,如
'username' -
验证器:可以是内置别名(
'required'、'string'),也可以是自定义类名(如'validatePasswordStrength')或完整类路径 -
额外选项:如
'on' => ['register'](场景)、'message' => '密码太弱'、'skipOnEmpty' => false等
方式一:使用模型内联方法(推荐快速验证)
适合逻辑简单、仅当前模型使用的验证。在模型类中定义一个 public 方法,方法名即为规则中指定的验证器名:
public function rules()
{
return [
['password', 'validatePasswordStrength'],
['email', 'email', 'message' => '邮箱格式不正确'],
];
}
public function validatePasswordStrength($attribute, $params)
{
$value = $this->$attribute;
if (strlen($value) addError($attribute, '密码至少8位,需包含大写字母和数字');
}
}
注意:addError() 必须显式调用,否则不会显示错误;该方法自动接收 $attribute 和 $params(来自 rules 中的额外键值对)。
方式二:独立验证器类(推荐复用与解耦)
创建继承 \yii\validators\Validator 的类,支持复用、配置化和客户端验证:
'on'











