maybeAuthId
データベースおよびセッション関連の操作を実行する単項アクションです。Hamlet テンプレートの定義にモナド アクションを含めることはできません。これを書いたらどうなるか想像してみてください (同様のモナドアクション):
$maybe a <- liftIO (putStrLn "Hello World") >> return (Just "Hi")
<p>Just #{a}
$nothing
<p>Nothing
そのアクションを実行する頻度。テンプレートがレンダリングされるたびに? ロードされたら?「Hello World」を端末に出力する以外のことをすると、非常に厄介になる可能性があり、それでも安全ではありません。クレジットカード情報?
そのため、シェイクスピアのすべてのテンプレートで純粋な値のみが許可されます。代わりにこれを行う必要があります:
getMyHandlerR :: Handler RepHtml
getMyHandlerR = do
muid <- maybeAuthId
$(widgetFile "foo")
(foo.hamlet:)
$maybe uid <- muid
<p>Foo
$nothing
<p>Bar
ご覧のとおり、maybeAuthId
関数はテンプレートの外側で実行され、結果はテンプレート内で照合されます。そうすれば、特定の時点でセッション/データベースがチェックされていること、およびデザイナーが十分な報酬を受け取っておらず、復讐を果たしたためにテンプレートがウイルスを挿入していないことを確認できます。あなた。
ところで、Bool
ユーザーがログインしているかどうかを示すために a を使用し、$if
代わりにステートメントを使用することもできます。そのためにモジュールのisJust
関数を使用したい場合があります。Data.Maybe