📅  最后修改于: 2020-10-16 07:14:37             🧑  作者: Mango
有时您需要验证未绑定到任何模型的值。您可以使用yii \ base \ DynamicModel类,该类支持动态定义属性和规则。
步骤1-将actionAdHocValidation方法添加到SiteController 。
public function actionAdHocValidation() {
$model = DynamicModel::validateData([
'username' => 'John',
'email' => 'john@gmail.com'
], [
[['username', 'email'], 'string', 'max' => 12],
['email', 'email'],
]);
if ($model->hasErrors()) {
var_dump($model->errors);
} else {
echo "success";
}
}
在上面的代码中,我们定义了一个具有用户名和电子邮件属性的“动态”模型,并对其进行了验证。
步骤2-在Web浏览器的地址栏中键入http:// localhost:8080 / index.php?r = site / ad-hoc-validation ,您将看到一条错误消息,因为我们的电子邮件长度为14个字符。
定制验证器有两种类型-
内联验证器由模型方法或匿名函数。如果属性未通过验证,则应调用yii \ base \ Model :: addError()方法以保存错误消息。
下面的RegistrationForm示例验证了city属性,因此它只能接受伦敦和巴黎这两个值。
$attribute, ['Paris', 'London'])) {
$this->addError($attribute, 'The city must be either "London" or "Paris".');
}
}
}
?>
独立的验证器扩展了yii \ validators \ Validator类。要实现验证逻辑,您应该覆盖yii \ validators \ Validator :: validateAttribute()方法。
步骤1-要使用独立验证器实现前面的示例,请将CityValidator.php文件添加到components文件夹。
$attribute, ['Paris', 'London'])) {
$this->addError($model, $attribute, 'The city must be either "Paris"
or "London".');
}
}
}
?>
步骤2-然后,以这种方式修改RegistrationForm模型。