1

私は改革ライブラリのチュートリアルに従っています。現在、2 つの必須フィールドとその設定を含むフォームがあるため、各フィールドのエラー メッセージがそのすぐ隣に表示されます。

postForm :: MyForm MyRequest
postForm = 
    MyRequest <$> name <*> msg <* inputSubmit "post it!"
  where
    name = labelText "name:"  ++>
            (inputText "" `transformEither` required "Name is required") <++ br <++ errorList
    msg  = labelText "message:" ++>
            (inputText "" `transformEither` required "Message is required") <++ br <++ errorList

たとえば、このフォームを空の状態で送信すると、検証が失敗し、ユーザーに再度入力するように求められ、次のようになります。

name: [______]
  * Name is Required
message: [_____]
  * Message is required

次のように、フォームの単一のエラー リストを作成する方法を知りたいです。

name: [______]
message: [_____]
  * Name is Required
  * Message is required

やってみた

postForm :: MyForm MyRequest
postForm =
    (MyRequest <$> name <*> msg <* inputSubmit "post it!") <++ errorList
  where
    name = labelText "name:"  ++>
            (inputText "" `transformEither` required "Name is required") <++ br
    msg  = labelText "message:" ++>
            (inputText "" `transformEither` required "Message is required") <++ br

しかし、エラーメッセージはまったく表示されません!


そのために必要な余分なボイラープレートがたくさんあるので、完全な実行可能な例を含めていません. ケースに関連するいくつかの関数の型シグネチャを次に示します。

type MyForm = Form (ServerPartT IO) [Input] ReqError H.Html ()

<++ :: (Monad m, Monoid view)
    => Form m input error view proof a
    -> Form m input error view () ()
    -> Form m input error view proof a

errorList :: (Monad m, ToMarkup error)
    => Form m input error Html () ()

http://hackage.haskell.org/package/reform-0.2.1/docs/Text-Reform-Core.html#v:-60--43--43-

http://hackage.haskell.org/package/reform-b​​laze-0.2.0/docs/Text-Reform-Blaze-Common.html#v:errorList

4

1 に答える 1