0

Webサイトのサインアップページを作成しようとしています。サインアッププロセスには2つの段階があります。

  1. ユーザーは、ページのフォームに名前、電子メール、パスワードを入力します。次にクリックし、次にクリックします

  2. ユーザーは新しいページに追加情報を入力し(写真をアップロードするなど)、[送信]をクリックします。

次に、このすべての情報(1ページと2ページから)を使用して、新しいユーザーを作成します。あるページから別のページに情報を保存するにはどうすればよいですか?

うまくいく可能性のある1つの方法は、2ページ目のフォームに追加のフィールドを作成し、最初のページの情報を入力することですが、少しハッキーなようです。それについて行くための推奨される方法はありますか?

4

2 に答える 2

3

Form.classユーザーとのやり取りごとに使用する必要はありません。すばらしいヘルパーですが、ただのヘルパーです。

登録プロセスをいくつかのアクションに分割します。各アクションは、モデルの一部のみを編集する責任があります。

  1. 最初のデフォルトビューは最大で、データの検証Form.classに注釈を使用する必要があります。Constraintsもちろん、などの追加のアクションセットが必要になりますnew/createedit/updateそのフォームを送信した後、アカウントはデータベースに保存されるため、一意のIDでアカウントを識別する他のアクションでアカウントを変更できます。
  2. change password次のビュー(これが唯一のフォームだとしましょう)は他のForm.class ビューを使用できますが、それが非常に簡単で、特別な検証ルール(パスワードがおかしいなど)がある場合は、つまり、使用できます。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 に答える