0

我正在尝试为网站创建注册页面。注册过程分为两个阶段:

  1. 用户在页面上的表单上输入他们的姓名、电子邮件、密码。他们点击下一步,然后

  2. 用户在新页面上输入附加信息(可能上传照片等)并单击提交。

然后使用所有这些信息(来自第 1 页和第 2 页)来创建新用户。如何将信息从一页存储到另一页?

一种可行的方法可能是在第二页的表单中创建额外的字段,并用第一页的信息填充它们,但这似乎有点笨拙。有推荐的方法吗?

4

2 回答 2

3

您不需要Form.class为与用户的每次交互都使用它,它是一个很好的帮手,但是......只是帮手。

将您的注册过程分成几个动作,每个动作只负责编辑模型的一部分

  1. 您的第一个默认视图应该是最大的,并且应该使用Form.classConstraints注释来验证数据。当然,您需要设置其他操作,例如new/createedit/update等。发送该表单后,该帐户将保存在数据库中,因此您可以在其他操作中对其进行更改,通过唯一 ID 识别它。
  2. 您的下一个视图(假设这是唯一的change password表单)可以使用其他Form.class 如果它很容易并且具有特殊的验证规则(如密码奇怪等),您可以使用 ie。editPassword/updatePassword一组操作并手动更新您的用户对象:

    public static Result updatePassword(Integer user_id){
        User user = User.find.byId(user_id);
        DynamicForm formData = form().bindFromRequest();
    
        if (!customValidatorMethod(formData.password)){
             return badRequest("Password was not changed");
        }
    
        user.password = formData.password;
        user.update(user_id);
        return ok("Password changed);
    }
    

接下来,您可以根据需要创建任意数量的步骤。

注意:不要在会话数据中保存用户名和密码,因为一些聪明人可以用它来对付他的老板......而不是使用id第一步创建的用户,另外你可以添加简单的字段,如registrationStepregistrationId(随机哈希)来识别所有必需的注册步骤之间的新用户。您将在完成注册过程后删除该会话数据,同时您可以通过简单检查步骤号来检查用户是否完成注册。

于 2012-07-23T18:32:35.730 回答
1

我这样做的方法是创建 User 对象,并在提交第一个表单后立即将其存储在数据库中,因为这样如果太麻烦,用户可以稍后再回来。

如果您不介意失去无国籍状态,您也可以使用 session() 临时存储它。

session("username", USERS_CHOSEN_NAME);
session("password", USERS_CHOSEN_PASSWORD);
于 2012-07-23T17:39:57.010 回答