maybeAuthId
데이터베이스 및 세션 관련 작업을 수행하는 모나드 행동입니다. 햄릿 템플릿의 정의에 모나드 액션을 사용할 수 없습니다. 이 (비슷한 모나드 동작을) 쓴 경우 무슨 일이 일어날 지 상상해
$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
을 사용하여 사용자가 로그인했는지 여부를 표시하고 대신 $if
문을 사용할 수 있습니다. 이를 위해 Data.Maybe
모듈의 isJust
기능을 사용할 수 있습니다.
쿨러. 나는 천천히 모나드와 haskell을 일반적으로 사용하고있다. –