ArkでXslate使う時のメモ
Ark初心者だけど、先輩に聞いたりAdventCallender見たりして、テンプレートからレンダリングできたので、メモ
一番シンプルなコード見てから説明した方が速そう
今回は「Oppai」というプロジェクトを例にする
package Oppai::Controller::Content; use strict; use warnings; use utf8; use Ark 'Controller'; use Try::Tiny; no Mouse; sub index :Path { #/contentのurlにユーザーがアクセスしたらこのメソッドが呼ばれる my ($self, $c) = @_;#$cの中にアクセスされたときの情報が入る $c->res->status('200'); #書かなくてもいいけど明示的にstatuscode200返してる. $c->stash->{say} = "hello"; #レスポンスされたindex.txの中に値を入れている $c->stash->{title} = "content"; $c->forward( $c->view('Xslate') ); #root/content.index.txをレンダリングする }
sub index :Pathって何?
- Controller以下のパッケージ名を小文字にしたurlにアクセスが来た場合に関数が実行される
- 上記コードの例だとOppai::Controller::Contentだから、/contentにアクセスされたとき
index.txの置く場所はどこなの?
- プロジェクトフォルダのルート(libとかtと同じ階層)にrootディレクトリを作る
- rootディレクトリ以下に、ルーティングするurlのpathに応じた場所にindex.txを置く
index.txには何を書くの?
- Arkからテンプレートで値を入れたいところ以外は普通のhtml文章です。
<DOCTYPE html> <html> <head> <title><: $title :></title> </head> <body> <h1><: $title :> </h1> <p><: $say :></p> </body> </html>
<: $title :>
となってる所は、Ark側で$c->stash->{title} = "content";
で値を挿入できる注意
- 下に書いた
:Local
Attributeを使った場合は、index.txの名称を{関数名}.txにしなければならない - テンプレートファイルの置き場所は、変わらずにroot以下のパッケージ名と同じ階層に置けばいい
- rootディレクトリはArkによって暗黙的に参照されるので、名前は変えない方がいいし、置き場所もプロジェクトのルートに置くのがいい
関数のAttribute(:Pathみたいなやつ)の種類
- sub {methodName}
:Local
- 関数名にルーティングしてくれる
- Oppai::Controller::Contentで書いた場合だと、/content/{methodName}にアクセスした時にこの関数が呼ばれる
- sub {methodName} :Local
:Args(1)
- urlに引数を持たせた場合にルーティングされる(Argsの中は数字を入れて下さい)
- 上の関数宣言だと、/content/{methodName}/{Argsに渡したい値}にアクセスした時に関数が実行される
まとめ
Perl界隈は便利モジュールの発展がUnityより元気な気がするので
モジュールのドキュメントを読む力が大事だと思った
あと結構暗黙的によしなにしてくれる処理が多いから
モジュールのコードも読めるようになれたらいいなぁと感じた