URLのパラメータ変換
URLのパラメータの扱いについて調べてみた
config/routes
/list/#Int ListR GET POSTこう書くと、URLのパラメータに数字が使える、それ以外は「404エラー」、ちょっと注意が必要で、「0087」みたいなパラメータも受け付けるので、これはプログラム側のバリデーション等で対応が必要
基本的な型は、PathPieceクラスのインスタンスなっているので、そのままURLに使えて変換してくれる
それ以外の型をURLパラメータに利用する
適当な場所に、型を定義してPathPieceのインスタンスにする
import qualified Text.Read as R
newtype DirId = DirId Int deriving(Show, Read, Eq)
instance PathPiece DirId where
toPathPiece (DirId n) = pack $ show n
fromPathPiece n = case R.reads $ unpack n of
(p, ""):_
| p < 1 -> Nothing
| otherwise -> Just $ DirId p
_ -> Nothing
toPathPiece関数は特定の型をTextへ変換してURLで利用できるようにし、fromPathPiece関数はその逆。そしてhandlerで
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Handler.DirList where
import Import
getDirListR :: DirId -> Handler Html
getDirListR (DirId n) = defaultLayout $ do
setTitle "Routing test"
$(widgetFile "did")
テンプレート
<div .container>
<div .bs-docs-section>
<div .row>
<div .col-lg-12>
<div .page-header>
<h1 #start>DirID Test
<p>n = #{show n}
こんな感じで、できまする、昨晩の宴で呼吸が苦しい...

0 件のコメント:
コメントを投稿