可直接用验证器类手动校验任意数据,无需模型;支持内置验证器(如EmailValidator)、组合验证(EachValidator)、自定义验证类及DynamicModel方式。

可以直接用验证器类手动创建实例并校验,不依赖模型的 rules() 或 validate() 流程。适合在控制器、服务类或非模型上下文中校验任意数据。
使用内置验证器手动校验
比如校验一个邮箱字符串是否合法:
- 先实例化验证器:
$validator = new \yii\validators\EmailValidator(); - 调用
validate()方法传入待校验值和错误变量:$isValid = $validator->validate('test@example.com', $error); -
$isValid返回布尔值,$error会接收错误消息(失败时)
注意:部分验证器(如 RequiredValidator、InValidator)支持直接传参配置,例如:
$validator = new \yii\validators\InValidator(['range' => ['active', 'inactive']]);$validator->validate('pending', $error); // false,$error 被赋值为默认错误信息
手动校验数组元素(each 场景)
若要校验一个数组中每个元素是否都为整数,不能直接用 IntegerValidator,而应组合 EachValidator:
$each = new \yii\validators\EachValidator(['rule' => ['integer']]);$isValid = $each->validate([1, 2, 'abc'], $error); // false-
$each = new \yii\validators\EachValidator(['rule' => ['integer', 'min' => 0]]);也支持嵌套参数
手动使用自定义独立验证类
假设你已写好 MobileValidator 类(继承 Validator,重写 validateAttribute()):
- 手动实例化:
$validator = new \app\validators\MobileValidator(); - 它没有
validate()方法,必须通过模拟属性方式调用:$model = new \yii\base\DynamicModel(['mobile' => '13800138000']);$validator->validateAttribute($model, 'mobile');if ($model->hasErrors('mobile')) { ... } - 更简洁的方式是让验证类也实现通用
validate()接口(需自行封装一层),但原生 Yii2 验证器设计以模型属性为中心
绕过模型做纯值校验的实用技巧
对于简单类型判断,可借助 DynamicModel 搭配验证规则,避免写完整模型:
$model = \yii\base\DynamicModel::validateData(['code' => 'ABC123'], [['code', 'string', 'length' => [6]]]);- 返回
bool;若需错误信息,改用:$model = new \yii\base\DynamicModel(['code' => 'AB']);$model->addRule('code', 'string', ['length' => [6]])->validate();$errors = $model->getFirstErrors();
这种方式灵活、无侵入,适合 API 参数预检、后台命令行校验等场景。











