Safe Haskell | None |
---|
IHP.ControllerSupport
Synopsis
- type Action' = IO ResponseReceived
- (|>) :: t1 -> (t1 -> t2) -> t2
- getRequestBody :: (?context :: ControllerContext) => IO ByteString
- getRequestPath :: (?context :: ControllerContext) => ByteString
- getRequestPathAndQuery :: (?context :: ControllerContext) => ByteString
- getHeader :: (?context :: ControllerContext) => ByteString -> Maybe ByteString
- data RequestContext = RequestContext Request Respond RequestBody (Key (Session IO String String)) FrameworkConfig
- request :: (?context :: ControllerContext) => Request
- requestHeaders :: Request -> RequestHeaders
- getFiles :: (?context :: ControllerContext) => [File ByteString]
- class (Show controller, Eq controller) => Controller controller where
- beforeAction :: (?context :: ControllerContext, ?modelContext :: ModelContext, ?theAction :: controller) => IO ()
- action :: (?context :: ControllerContext, ?modelContext :: ModelContext, ?theAction :: controller) => controller -> IO ()
- runAction :: forall controller. (Controller controller, ?context :: ControllerContext, ?modelContext :: ModelContext) => controller -> IO ResponseReceived
- createRequestContext :: ApplicationContext -> Request -> Respond -> IO RequestContext
- data ControllerContext
- class InitControllerContext application where
- initContext :: (?modelContext :: ModelContext, ?requestContext :: RequestContext, ?applicationContext :: ApplicationContext, ?context :: ControllerContext) => IO ()
- runActionWithNewContext :: forall application controller. (Controller controller, ?applicationContext :: ApplicationContext, ?context :: RequestContext, InitControllerContext application, ?application :: application, Typeable application, Typeable controller) => controller -> IO ResponseReceived
- respondAndExit :: Response -> IO ()
- newtype ResponseException = ResponseException Response
- jumpToAction :: forall action. (Controller action, ?context :: ControllerContext, ?modelContext :: ModelContext) => action -> IO ()
- requestBodyJSON :: (?context :: ControllerContext) => Value
Documentation
getRequestBody :: (?context :: ControllerContext) => IO ByteString Source #
getRequestPath :: (?context :: ControllerContext) => ByteString Source #
Returns the request path, e.g. /Users
or /CreateUser
getRequestPathAndQuery :: (?context :: ControllerContext) => ByteString Source #
Returns the request path and the query params, e.g. /ShowUser?userId=9bd6b37b-2e53-40a4-bb7b-fdba67d6af42
getHeader :: (?context :: ControllerContext) => ByteString -> Maybe ByteString Source #
Returns a header value for a given header name. Returns Nothing if not found
The header is looked up in a case insensitive way.
>>>
getHeader "Content-Type"
Just "text/html"
>>>
getHeader "X-My-Custom-Header"
Nothing
data RequestContext Source #
Constructors
RequestContext Request Respond RequestBody (Key (Session IO String String)) FrameworkConfig |
Instances
ConfigProvider RequestContext Source # | |
Defined in IHP.Controller.RequestContext Methods getFrameworkConfig :: RequestContext -> FrameworkConfig Source # |
request :: (?context :: ControllerContext) => Request Source #
Returns the current HTTP request.
See https://hackage.haskell.org/package/wai-3.2.2.1/docs/Network-Wai.html#t:Request
requestHeaders :: Request -> RequestHeaders #
getFiles :: (?context :: ControllerContext) => [File ByteString] Source #
class (Show controller, Eq controller) => Controller controller where Source #
Minimal complete definition
Methods
beforeAction :: (?context :: ControllerContext, ?modelContext :: ModelContext, ?theAction :: controller) => IO () Source #
action :: (?context :: ControllerContext, ?modelContext :: ModelContext, ?theAction :: controller) => controller -> IO () Source #
Instances
Controller WelcomeController Source # | |
Defined in IHP.Welcome.Controller |
runAction :: forall controller. (Controller controller, ?context :: ControllerContext, ?modelContext :: ModelContext) => controller -> IO ResponseReceived Source #
createRequestContext :: ApplicationContext -> Request -> Respond -> IO RequestContext Source #
data ControllerContext Source #
A container storing useful data along the request lifecycle, such as the request, the current user, set current view layout, flash messages, ...
The controller context is usually accessed via the ?context
variable. It's availble inside the action and the view. Think of it as a key-value-map where the key is the type of the value.
You can store information inside the context using putContext
:
>>>
newtype CurrentLayout = CurrentLayout Html
>>>
>>>
?context <- newControllerContext
>>>
putContext (CurrentLayout layout)
Inside an action you can access the values using fromContext
:
>>>
(CurrentLayout layout) <- fromContext
You can freeze the context and then access values without being inside an IO context (like inside views which are pure):
Call freeze
inside an IO part:
>>>
?context <- freeze ?context
(freeze
is automatically called by IHP before rendering a view, so usually you don't need to call it manually)
Then use the frozen context from your pure code like this:
>>>
let (CurrentLayout layout) = fromFrozenContext in ...
The context is initially created before a action is going to be executed. It's life cycle looks like this:
newControllerContext
: The new controller context is created- The
runActionWithNewContext
fills in a few default values: The current?application
and also the Flash Messages to be rendered in the to-be-generated response. initContext
: The initContext function of theInitControllerContext WebApplication
(inside your FrontController.hs) is called. There application-specific context can be provided. Usually this is the current user and the default layout.beforeAction
: Here the context could also be modified. E.g. the layout could be overriden here for the whole controller.action ..
: The action itself.- Freezing: Before rendering the response, the container is frozen. Frozen means that all previously mutable fields become immutable.
- View Rendering: The frozen container is now used inside the view and layout to display information such as the current user or flash messages
Instances
ConfigProvider ControllerContext Source # | |
Defined in IHP.Controller.Context Methods getFrameworkConfig :: ControllerContext -> FrameworkConfig Source # |
class InitControllerContext application where Source #
Minimal complete definition
Nothing
Methods
initContext :: (?modelContext :: ModelContext, ?requestContext :: RequestContext, ?applicationContext :: ApplicationContext, ?context :: ControllerContext) => IO () Source #
runActionWithNewContext :: forall application controller. (Controller controller, ?applicationContext :: ApplicationContext, ?context :: RequestContext, InitControllerContext application, ?application :: application, Typeable application, Typeable controller) => controller -> IO ResponseReceived Source #
respondAndExit :: Response -> IO () Source #
newtype ResponseException Source #
Constructors
ResponseException Response |
Instances
Show ResponseException Source # | |
Defined in IHP.ControllerSupport Methods showsPrec :: Int -> ResponseException -> ShowS # show :: ResponseException -> String showList :: [ResponseException] -> ShowS # | |
Exception ResponseException Source # | |
Defined in IHP.ControllerSupport Methods toException :: ResponseException -> SomeException # |
jumpToAction :: forall action. (Controller action, ?context :: ControllerContext, ?modelContext :: ModelContext) => action -> IO () Source #
requestBodyJSON :: (?context :: ControllerContext) => Value Source #