ihp-1.4.0: Haskell Web Framework
Safe HaskellNone
LanguageGHC2021

IHP.ControllerSupport

Synopsis

Documentation

(|>) :: a -> (a -> b) -> b infixl 8 Source #

Pipe operator

getRequestPath :: (?request :: Request) => ByteString Source #

Returns the request path, e.g. /Users or /CreateUser

getRequestPathAndQuery :: (?request :: Request) => ByteString Source #

Returns the request path and the query params, e.g. /ShowUser?userId=9bd6b37b-2e53-40a4-bb7b-fdba67d6af42

getHeader :: (?request :: Request) => 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

requestHeaders :: Request -> RequestHeaders Source #

A list of headers (a pair of key and value) in an HTTP request.

getFiles :: (?request :: Request) => [File ByteString] Source #

class (Show controller, Eq controller) => Controller controller where Source #

Minimal complete definition

action

Methods

beforeAction :: IO () Source #

action :: controller -> IO () Source #

runAction :: (Controller controller, ?context :: ControllerContext, ?modelContext :: ModelContext, ?respond :: Respond) => controller -> IO ResponseReceived Source #

data ControllerContext #

Instances

Instances details
HasField "frameworkConfig" ControllerContext FrameworkConfig Source #

Access frameworkConfig via the request vault

Instance details

Defined in IHP.Controller.Context

HasField "logger" ControllerContext Logger Source # 
Instance details

Defined in IHP.Controller.Context

Methods

getField :: ControllerContext -> Logger #

HasField "request" ControllerContext Request Source #

Access request from the TMap

This allows controllerContext.request to work by retrieving the WAI Request stored in the TMap.

Instance details

Defined in IHP.Controller.Context

class InitControllerContext (application :: k) where Source #

Minimal complete definition

Nothing

Methods

initContext :: IO () Source #

Instances

Instances details
InitControllerContext () Source # 
Instance details

Defined in IHP.ControllerSupport

Methods

initContext :: IO () Source #

runActionWithNewContext :: forall application controller. (Controller controller, ?request :: Request, ?respond :: Respond, InitControllerContext application, ?application :: application, Typeable application, Typeable controller) => controller -> IO ResponseReceived Source #

newContextForAction :: forall application controller. (Controller controller, ?request :: Request, ?respond :: Respond, InitControllerContext application, ?application :: application, Typeable application, Typeable controller) => controller -> IO (Either (IO ResponseReceived) ControllerContext) Source #

respondAndExit :: Response -> IO () Source #

Simple version - just throws the response, no context needed

respondAndExitWithHeaders :: (?request :: Request) => Response -> IO () Source #

Version that adds headers from context (for render, etc.)

jumpToAction :: (Controller action, ?context :: ControllerContext, ?modelContext :: ModelContext, ?respond :: Respond, ?request :: Request) => action -> IO () Source #

requestBodyJSON :: (?request :: Request) => Value Source #

startWebSocketApp :: forall webSocketApp application. (?request :: Request, ?respond :: Respond, InitControllerContext application, ?application :: application, Typeable application, WSApp webSocketApp) => webSocketApp -> IO ResponseReceived -> Application Source #

startWebSocketAppAndFailOnHTTP :: forall webSocketApp application. (?request :: Request, ?respond :: Respond, InitControllerContext application, ?application :: application, Typeable application, WSApp webSocketApp) => webSocketApp -> Application Source #

setHeader :: (?request :: Request) => Header -> IO () Source #

Set a header value for a given header name.

>>> setHeader ("Content-Language", "en")

getAppConfig :: forall configParameter context. (?context :: context, ConfigProvider context, Typeable configParameter) => configParameter Source #

Returns a custom config parameter

>>> getAppConfig @StripePublicKey
StripePublicKey "pk_test_..."

Example:

First you need to define a custom config parameter in Config.hs:

-- Config/Config.hs
newtype StripePublicKey = StripePublicKey Text

config :: ConfigBuilder
config = do
    -- ...
    stripePublicKey <- StripePublicKey <$> env @Text "STRIPE_PUBLIC_KEY"
    option stripePublicKey

Then you can access it using getAppConfig:

action MyAction = do
    let (StripePublicKey stripePublicKey) = getAppConfig @StripePublicKey

    putStrLn ("Stripe public key: " <> stripePublicKey)

data Request Source #

Information on the request sent by the client. This abstracts away the details of the underlying implementation.

Instances

Instances details
Show Request 
Instance details

Defined in Network.Wai.Internal

ToApplication Application 
Instance details

Defined in Network.Wai.UrlMap

ToApplication UrlMap 
Instance details

Defined in Network.Wai.UrlMap

HasField "actionType" Request ActionType Source # 
Instance details

Defined in IHP.ActionType

HasField "frameworkConfig" Request FrameworkConfig Source # 
Instance details

Defined in IHP.RequestVault

HasField "modelContext" Request ModelContext Source # 
Instance details

Defined in IHP.RequestVault.ModelContext

HasField "parsedBody" Request RequestBody Source # 
Instance details

Defined in IHP.RequestVault.ModelContext

HasField "pgListener" Request PGListener Source # 
Instance details

Defined in IHP.RequestVault

Methods

getField :: Request -> PGListener #

HasField "request" ControllerContext Request Source #

Access request from the TMap

This allows controllerContext.request to work by retrieving the WAI Request stored in the TMap.

Instance details

Defined in IHP.Controller.Context

setupActionContext :: (InitControllerContext application, ?application :: application, Typeable application) => TypeRep -> Request -> Respond -> IO (ControllerContext, Maybe SomeException) Source #

Shared request context setup, specialized once per application type. Takes a pre-computed TypeRep to avoid per-controller-type code duplication. NOINLINE ensures GHC compiles one copy shared across all controllers.

Returns (controllerContext, Nothing) on success, or (controllerContext, Just exception) if initContext failed. The context is always returned so callers can use it for error rendering.