如何在Yii 2中客户端验证失败时重新初始化模型?

时间:2016-12-09 06:43:02

标签: validation model-view-controller model yii2 yii2-advanced-app

我正在使用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;

验证失败时,我希望所有字段都为空(例如,当用户输入无效的电子邮件地址时)。我怎么能这样做?

1 个答案:

答案 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标识符。