Je la forme suivante:.Comment traiter un formulaire Yesod paramétré à partir d'un gestionnaire dans lequel le paramètre est indisponible?
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
Sur ma page d'accueil, j'utilise generateFormPost $ userForm (entityKey userEnt)
pour faire un formulaire avec le UserId
rempli Mais je veux gérer l'entrée avec AJAX, donc une Handler
séparée obtient les résultats de la forme. L'autre gestionnaire n'a pas accès au UserId
. Comment puis-je traiter le formulaire? J'ai essayé, ce qui jette une erreur:
postDemoFormR :: Handler RepJson
postDemoFormR = do
((formData, _), _) <- runFormPost $ userForm undefined
$(logDebug) $ pack $ show formData
return $ repJson()
je pouvais changer le type de userForm
à accepter Maybe UserId
au lieu de simplement UserId
ou faire un UserId
faux pour l'appel à runFormPost
mais deux d'entre eux sont hacks. Existe-t-il un moyen facile et propre de le faire?
La solution 'requireAuthId' fonctionne dans mon cas particulier, merci! Dans le cas général, comme dans les sections Forms du livre, vous voulez dire 'form :: Maybe UserId -> Form Blog 'et utiliser quelque chose comme' peut-être hiddenField pure mbUid' pour le champ 'UserId', n'est-ce pas? Vous construisez donc un formulaire avec un champ pré-rempli sur la page HTML et un champ masqué le gestionnaire POST. –
Oui, c'est vrai –