在Yii中提交表单之前的模态用户信息

时间:2014-12-07 20:30:50

标签: php forms yii modal-dialog

我有一个表单,在用户提交表单并且验证成功后,我想在模态窗口中询问他的电子邮件和昵称。如果用户填写并提交电子邮件和昵称,我想验证它并将其保存为新记录或获取现有记录(如果过去已使用过电子邮件)。如果验证不成功,用户应该能够更正同一模态中的值。如果一切正常,我想保存表单,包括创建用户ID。

我已经完成了表单保存和用户创建/查找过程。我只是不知道,如何把它放在一起,在我上面描述的场景中工作。任何人都可以解释一下,如何在Yii中完成这项工作?我正在使用Yii 1.1.15和Yii Booster。谢谢。

1 个答案:

答案 0 :(得分:0)

在Yii中,_form.php视图文件默认在update.phpcreate.php视图中使用。

所以,你可能需要做一些事情。类似:在update.php和create.php视图中插入带有模态的表单。 这些动作和不同,所以你保持逻辑分离;这是MVC的基本优势。

public function actionCreate() {
    $model = new Users;
    if (isset($_POST['Users'])) {
        $model->attributes = $_POST['Users'];
        if ($model->save()) { // here in the save() method the valadation is included
                              // ONLY after we validate and successfully saved we go to update action
                $this->redirect(array('update', 'id' => $model->id));
        }
    }
    $this->render('create', array(
        'model' => $model,
    ));
}

主要的是,当您尝试保存save()方法时,验证会自动发生。 因此,如果验证不成功,逻辑会返回相同的操作(例如创建),其中包含视图中填充的字段,因为模型已经将数据传递到其中:$model->attributes = $_POST['Users']

如果验证成功,我们会进一步重定向。不是nesaxary ajax表单提交,即使是随意提交也适合这里。

public function actionUpdate($id) {
    $model = $this->loadModel($id);
    if (isset($_POST['Users'])) {
        $model->attributes = $_POST['Users'];
        if ($model->save()) { // after saving EXISTING record we redirect to 'admin' action
                $this->redirect(array('admin'));
        }
    }
    $this->render('update', array(
        'model' => $model,
    ));
} 

您在原始设计中保留的视图(更新/创建)中的表单。

在模型规则()中验证唯一性很简单:

array('username, email', 'unique'),

电子邮件语法的电子邮件语言似乎如下:

array('email', 'email'),