Как сгенерировать виджет токена на 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">

Как мне сгенерировать это значение токена или как я могу изменить свою форму входа для этого?

Спасибо за ваше время, и я очень ценю вашу помощь


person tonylattke    schedule 03.09.2014    source источник


Ответы (1)


Вы можете использовать getRequest для получения YesodRequest, а затем reqToken, чтобы получить сам токен, например. fmap reqToken getRequest.

person Michael Snoyman    schedule 03.09.2014