最近、次の問題yesod
に出くわしました:
- アプリケーションフォームを表示し、ユーザーが自分のデータを特別なハンドラーに POST できるようにします
- ブラウザを前のページに
FormFailure
リダイレクトする - エラーメッセージを印刷...
- ...そして、誤ったユーザー提供データがすでに入力されているフォームを再表示します
私に関する限り、これPOST/Redirect/GET
がすべてです。
ポイント <1-3> は単純明快な実装が必要でしたが、ポイント <4> を達成することは不可能であることがわかりました。
yesod -formパッケージはこの問題を自動的に処理しますが、フォームの解析 <2> とエラー処理 <3,4> の間のリダイレクトを許可しません。
マイケル・スノイマンの回答への応答
送信されたデータをシリアル化し、リダイレクト後に何らかの方法でフォームに挿入する必要があることをお勧めします。これは、より詳細な質問につながります。
シリアル化するデータを取得する方法は?
を使用できることはわかっていますが、関連する情報はどれですか (フィールドの は自動的に生成されます)。
runRequestBody
:: GHandler s m RequestBodyContents
name
フォームにデータを挿入する方法は?
たとえばaoptのタイプを見ると
aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)
デフォルト値が と同じタイプである必要があることがわかります。そのため、
Field
正しく解析されない可能性のあるユーザー提供のデータを再挿入することはできません。例: ユーザーは 'A' を に入力し
intField
ます。リダイレクト後に同じフィールドに「A」を表示できるようにしたいのですが、API では許可されていません。
この問題にどう対処すればよいですか?