p_chinのおっぱいブログ

UnityとPerlなど

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";で値を挿入できる

    注意

  • 下に書いた:LocalAttributeを使った場合は、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より元気な気がするので

モジュールのドキュメントを読む力が大事だと思った

あと結構暗黙的によしなにしてくれる処理が多いから

モジュールのコードも読めるようになれたらいいなぁと感じた