りんごがでている

何か役に立つことを書きます

Yesodチュートリアルの蛇足(2)

前回の続きを。

参考にしているチュートリアルはこちらから。
Haskell web programming

今日は2.Echoからやっていこう。

YesodはFront Controller Patternをとっている。
つまりYesodへのリクエストはひとつの入り口から入って、そこから各所に割り振られる。
その設定は、config/routesファイルに書かれている。

その中身はこんな感じ。(最後の行はチュートリアルの中で加えたルーティングのための宣言)

/static StaticR Static getStatic
/auth   AuthR   Auth   getAuth

/favicon.ico FaviconR GET
/robots.txt RobotsR GET

/ RootR GET

/echo/#String EchoR GET

最後の一行を加えて保存した瞬間、自動的にコンパイルがスタート。ォオー!!(゚д゚屮)屮

そして怒られる。

Application.hs:31:1: Not in scope: `getEchoR'

なるほど、getEchoRなんか知らんと。これはHandler/Root.hsの方に実装するらしい。
チュートリアルに従ってgetEchoRを加えて保存するとちゃんと動くようになった。

ところでこのEchoプログラム、XSSなどの対策は大丈夫なのだろうか??

それが大丈夫らしい。

詳しくはここに書いてあるが、Haskellの強力な型が我々を不正な入力から守ってくれる。
入力されたStringやText型の文章は、テンプレートの所定の場所に挿入される際、Html型に型変換される。
Html型はエスケープされているので、javascriptなどのコードを実行することはできなくなる。
かくして悪意のある入力から守られる。

Yesodで使われているテンプレートの形式は、シェイクスピアにちなんだ名前が付けられている。
HTML,CSS,Javascriptのテンプレートはそれぞれ以下のような名前が付いている。

HTML Hamlet
CSS Lucius
Javascript Julius

templateディレクトリにあるファイルの拡張子をみると、.hamletとか.luciusとか.juliusとかついていて、それぞれがHTML,CSS,Javascriptのテンプレートに対応しているらしい。

詳しい文法などについて勉強したら、またそのうち書きますm(_ _)m