久しぶりにCatalyst

やっと一息つける時間だ。というわけで卒業研究に向けて軽くCatalystをいじってみる。APIプログラミングにしたいんでView::JSONでほげほげしてみるテスト。

とりあえずViewで作りますが、TT作る要領で

% script/testapp_create.pl view JSON JSON 

な感じでおっけ。さすがMVC


で、どう使っていくかですが、stashに入れるみたいですがどのkeyを使うかを
expose_stashで指定するみたいなのでconfigのyaml

View::JSON :
  expose_stash : TestValues

って書くとstash->{TestValues}が使われるみたいで。そして試しにこう書いて

sub test : Global   { 
    my ( $self, $c ) = @_; 
    $c->stash->{TestValues} = { Hash => "reference" }; 
    $c->forward( $c->view("JSON") );
}

localhost:3000/test ってやるとこうでます。

{"Hash":"reference"}

で、configを

View::JSON :
  expose_stash : 
    - TestValues

こうすると

{"TestValues":{"Hash":"reference"}}

こう返ってきます。なんかここらへんDBICみたい。

あと、expose_stashを変えたい場合(そんな場面ないよな、きっと)

$c->component('View::JSON')->{expose_stash};

なんてやると設定値getできるみたいです。つかcomponentをはじめて知った。
そしてモードかなんかで出力割り振りたい場合、

sub end : ActionClass('RenderView') {
    my ( $self, $c ) = @_;
    
    if ( $c->req->param("format") eq "json" )   {
        $c->forward( $c->view("JSON") );
    }   
} 

こんなん書いたら test?format=json って書いたらjson返ってきたよ。おっけおっけ。
RenderViewってこう使うのね。勉強になる。
とりあえずJSONは吐けたからあとはフォーマットとインターフェースかな。