如何在Yesod上生成令牌小部件?

时间:2014-09-03 14:21:51

标签: yesod csrf-protection hamlet yesod-forms

我有Yesod的下一个问题。我想在我的HTML上创建自己的表单,因为我想要自己的标签和标签,但问题是如果我的表单是使用下一个代码自动生成的,我怎么能这样做:

entryForm :: Form Post
entryForm = renderDivs $ Post
    <$> areq   textField "name" Nothing
    <*> areq   textField "text" Nothing
    <*> areq   timeField "hour" Nothing

我的处理程序是:

getPostNewR :: Handler RepHtml
getPostNewR = do
    (postWidget, enctype) <- generateFormPost entryForm
    defaultLayout $ do
        $(widgetFile "post_new")

我的post_new.hamlet文件是这样的:

<form method=post enctype=#{enctype}>
^{postWidget}
<div>
    <input type=submit value="Create Post">

我希望我的表单看起来像这样:

<form method="post" id="form_new_post" action="/post/new_do">
    <h4>Name:</h4>
    <div class="form-group">
        <textarea name="name" id="post_name" class="form-control" autofocus="autofocus"></textarea>
    </div>
    <h4>Text:</h4>
    <div class="form-group">
        <textarea name="text" id="post_text" class="form-control"></textarea>
    </div>
    <input type=submit value="Create Post">
</form>

但是需要带有令牌的标签,如下所示:

<input type="hidden" name="_token" value="ETjYBzdwQ1">

我如何生成此标记值或如何更改我的entryForm?

感谢您的时间,我非常感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您可以使用getRequest获取YesodRequest,然后使用reqToken获取令牌,例如fmap reqToken getRequest