我正在使用Yii 2表单,我希望在客户端验证失败时重新初始化模型。例如,使用以下某些规则:
$popover-inner-padding: 1px !default;
$popover-bg: #fff !default;
$popover-max-width: 276px !default;
$popover-border-width: $border-width !default;
$popover-border-color: $brand-info;
$popover-box-shadow: 0 5px 10px rgba(0, 0, 0, .2) !default;
$popover-title-bg: $brand-info;
$popover-title-padding-x: 14px !default;
$popover-title-padding-y: 8px !default;
$popover-content-padding-x: 14px !default;
$popover-content-padding-y: 9px !default;
$popover-arrow-width: 10px !default;
$popover-arrow-color: $popover-bg !default;
$popover-arrow-outer-width: ($popover-arrow-width + 1px) !default;
$popover-arrow-outer-color:$brand-info;
验证失败时,我希望所有字段都为空(例如,当用户输入无效的电子邮件地址时)。我怎么能这样做?
答案 0 :(得分:2)
我假设您使用标准的Yii 2方式加载模型:
$model = new SomeModel();
if ($model->load(\Yii::$app->request->post()) && $model->save()) {
// ...
}
return $this->render('view', ['model' => $model]);
验证失败时将字段设置为null
。您不希望创建新实例(这会更容易),因为您将丢失所有验证消息。
$model = new SomeModel();
if ($model->load(\Yii::$app->request->post())) {
if ($model->save()) {
// ....
} else {
$model->username = null;
$model->password = null;
}
}
return $this->render('view', ['model' => $model]);
更新:对于客户端验证,在视图中添加此JS代码:
$("#form-ID").on("afterValidateAttribute", function (event, attribute, messages) {
if (event.result === false) {
attribute.value = "";
}
});
将#form-ID
替换为正确的表单元素JS标识符。