我正在尝试为网站创建注册页面。注册过程有两个阶段:
用户在页面上的表单上输入他们的姓名,电子邮件,密码。他们点击下一步,然后点击
用户在新页面上输入其他信息(可能上传照片,无论如何)并点击提交。
然后使用所有这些信息(来自第1页和第2页)创建新用户。如何将信息从一个页面存储到另一个页面?
可行的一种方法可能是在第二页上的表单中创建额外的字段,并用第一页的信息填充它们,但它看起来有点hacky。是否有推荐的方式去做?
答案 0 :(得分:3)
你不需要为每次与用户的交互使用Form.class
,这是很好的帮手,但是......只是帮助。
将您的注册流程划分为少量操作,每个操作都只负责编辑模型的一部分
Form.class
和Constraints
注释来验证数据。当然,您需要设置new/create
或edit/update
等其他操作。发送该表单后,该帐户将保存在DataBase中,因此您只需在其他操作中对其进行更改即可识别它唯一ID。您的下一个视图(假设只有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);
}
接下来,您可以根据需要创建任意数量的步骤。
注意:不要在会话数据中保存用户名和密码,因为某些 smartie 可以将其用于他的老板....而是使用在第一步中创建的用户的id
另外,您可以添加简单字段,如registrationStep
或registrationId
(随机散列),以便在所有必需的注册步骤之间识别新用户。您将在完整注册过程后删除该会话数据,同时您可以通过简单检查步骤编号来检查用户是否完成注册。
答案 1 :(得分:1)
我这样做的方法是创建User对象并在提交第一个表单后立即将其存储在数据库中,因为这样可以让用户稍后再回来,如果它太麻烦了。
如果你不介意失去无国籍状态,你也可以使用session()暂时存储它。
session("username", USERS_CHOSEN_NAME);
session("password", USERS_CHOSEN_PASSWORD);