Ich habe die folgende Form:.Wie verarbeite ich eine parametrisierte Yesod-Form von einem Handler, wo der Parameter nicht verfügbar ist?
userForm :: UserId -> Form UserDemographics
userForm uid = renderDivs $ UserDemographics <$>
pure uid <*>
areq yearField "Year of birth" Nothing <*>
areq textField "Gender" Nothing <*>
areq countryField "Country of residence" Nothing <*>
areq boolField "Are you a computer programmer?" Nothing
Auf meiner Homepage, ich generateFormPost $ userForm (entityKey userEnt)
verwenden, um ein Formular mit den UserId
ausgefüllt zu machen, aber ich mag die Eingabe mit AJAX zu handhaben, so dass ein separaten Handler
bekommt die Ergebnisse die Form. Der andere Handler hat keinen Zugriff auf UserId
. Wie bearbeite ich das Formular? Ich habe versucht, das, was einen Fehler auslöst:
postDemoFormR :: Handler RepJson
postDemoFormR = do
((formData, _), _) <- runFormPost $ userForm undefined
$(logDebug) $ pack $ show formData
return $ repJson()
Ich konnte userForm
‚s Typ verändern Maybe UserId
statt nur zu akzeptieren UserId
oder eine gefälschte UserId
für den Anruf zu runFormPost
bilden aber diese beiden sind Hacks. Gibt es einen einfachen, sauberen Weg, dies zu tun?
Die 'requireAuthId' Lösung funktioniert in meinem speziellen Fall, danke! Es ist der allgemeine Fall, wie in den Forms-Abschnitten des Buches meinst du mit 'form :: Maybe UserId -> Form Blog' und mit etwas wie' vielleicht hiddenField pure mbUid' für das 'UserId'-Feld richtig? Sie würden also ein Formular mit einem vorgefüllten Feld auf der HTML-Seite und einem versteckten Feld, dem POST-Handler, erstellen. –
Ja, das stimmt –