Error handlers get Nothing for current route

This commit is contained in:
Michael Snoyman 2010-08-04 11:00:43 +03:00
parent 1aa19bcf92
commit 39818c8f57
2 changed files with 9 additions and 3 deletions

View File

@ -234,11 +234,12 @@ toWaiApp' y segments env = do
render u = fromMaybe
(fullRender (approot y) (formatPathSegments site) u)
(urlRenderOverride y u)
let errorHandler' = localNoCurrent . errorHandler
rr <- parseWaiRequest env session'
let h = do
onRequest
case eurl of
Left _ -> errorHandler NotFound
Left _ -> errorHandler' NotFound
Right url -> do
isWrite <- isWriteRequest url
ar <- isAuthorized url isWrite
@ -253,10 +254,10 @@ toWaiApp' y segments env = do
redirect RedirectTemporary url'
Unauthorized s -> permissionDenied s
case handleSite site render url method of
Nothing -> errorHandler $ BadMethod method
Nothing -> errorHandler' $ BadMethod method
Just h' -> h'
let eurl' = either (const Nothing) Just eurl
let eh er = runHandler (errorHandler er) render eurl' id y id
let eh er = runHandler (errorHandler' er) render eurl' id y id
let ya = runHandler h render eurl' id y id
(s, hs, ct, c, sessionFinal) <- unYesodApp ya eh rr types
let sessionVal = encodeSession key' exp' host sessionFinal

View File

@ -66,6 +66,7 @@ module Yesod.Handler
, runHandler
, YesodApp (..)
, toMasterHandler
, localNoCurrent
) where
import Prelude hiding (catch)
@ -438,3 +439,7 @@ data RedirectType = RedirectPermanent
| RedirectTemporary
| RedirectSeeOther
deriving (Show, Eq)
localNoCurrent :: GHandler s m a -> GHandler s m a
localNoCurrent =
GHandler . local (\hd -> hd { handlerRoute = Nothing }) . unGHandler