Как создать все ошибки в одном списке при создании формы с помощью библиотеки Reform?
Я следую учебному пособию для библиотеки реформ. В настоящее время у меня есть форма с двумя обязательными полями и ее настройка, поэтому рядом с ней появляется сообщение об ошибке для каждого поля.
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
http://hackage.haskell.org/package/reform-blaze-0.2.0/docs/Text-Reform-Blaze-Common.html
1 ответ
Вместо использования errorList
функция, использование childErrorList
, Он также будет содержать ошибки из подчиненных форм.
(MyRequest <$> name <*> msg <* inputSubmit "post it!") <++ childErrorList
Скобки вокруг родительской формы важны. Если вы делаете
MyRequest <$> name <*> msg <* inputSubmit "post it!" <++ childErrorList
тогда оператор предшествует сделать так, чтобы childErrorList
только получает ошибки от кнопки отправки (ни одной вообще) вместо всей формы.