Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2007-01-05

[][]Chain#03 Chain#03 - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Chain#03 - LAPISLAZULI HILL#Catalyst Chain#03 - LAPISLAZULI HILL#Catalyst のブックマークコメント

Catalyst in Chains#02 - LAPISLAZULI HILL#Catalyst - Catalystグループの役に立たないメモの続き

Chained('/')

明示的に書いたほうがいいかも

sub language : Chained('/') PathPart('') CaptureArgs(1) {
    my ($self, $c, $language) = @_;
    $c->stash->{language} = $language;
}

それはともかく自分で読み返してみて,やっぱり全くわかってないことがわかったのでちゃんとドキュメントとか読む

マニュアルの(hallo/*/world/*)

http://search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/DispatchType/Chained.pm

sub hello : Chained('/') PathPart('hello') CaptureArgs(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } = "Hello ";
    $c->stash->{ arg_sum } = $int;
}

sub world : Chained('hello') PathPart('world') Args(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } .= "World!";
    $c->stash->{ arg_sum } += $int;

    $c->response->body( join "<br/>\n",
                        $c->stash->{ message },
                        $c->stash->{ arg_sum },);
}
[debug] Loaded Chained actions:
.-------------------------------------+--------------------------------------.
| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /hello/*/world/*                    | /hello (1)                           |
|                                     | => /world                            |
'-------------------------------------+--------------------------------------'

http://localhost:3000/hello/12345/world/67890

Hello World!
80235

ふむ.引数ごとに処理をして動作ができる

処理を増やす(foo/*/bar/* x2)

sub math : Chained('/') PathPart('math') CaptureArgs(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } = "Math?: $int";
    $c->stash->{ arg_sum } = $int;
}

sub plus : Chained('math') PathPart('plus') Args(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } .= " + $int";
    $c->stash->{ arg_sum } += $int;
}

sub minus : Chained('math') PathPart('minus') Args(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } .= " - $int";
    $c->stash->{ arg_sum } -= $int;
}

sub end : ActionClass('RenderView') {
    my ($self, $c) = @_;
    $c->response->body( join "<br/>\n",
                        $c->stash->{ message },
                        $c->stash->{ arg_sum },);
}
[debug] Loaded Chained actions:
.-------------------------------------+--------------------------------------.
| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /math/*/minus/*                     | /math (1)                            |
|                                     | => /minus                            |
| /math/*/plus/*                      | /math (1)                            |
|                                     | => /plus                             |
'-------------------------------------+--------------------------------------'

増えてる

http://colinux:3000/math/12345/plus/67890

Math?: 12345 + 67890
80235

http://colinux:3000/math/12345/minus/67890

Math?: 12345 - 67890
-55545

ああ,これはathPart('')にしたらさいしょのといっしょだなぁ


最後の引数を指定しないのも取る(foo/*/bar, foo/*/bar/*)

別の例にしたほうがいいかも知れないけど強引に

sub math : Chained('/') PathPart('math') CaptureArgs(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } = "Math?: $int";
    $c->stash->{ arg_sum } = $int;
}

sub plus : Chained('math') PathPart('plus') Args(1) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } .= " + $int";
    $c->stash->{ arg_sum } += $int;
}

sub plus_zero : Chained('math') PathPart('plus') Args(0) {
    my ($self, $c, $int) = @_;
    $c->stash->{ message } .= " + 0";
}

sub end : ActionClass('RenderView') {
    my ($self, $c) = @_;
    $c->response->body( join "<br/>\n",
                        $c->stash->{ message },
                        $c->stash->{ arg_sum },);
}
[debug] Loaded Chained actions:
.-------------------------------------+--------------------------------------.
| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /math/*/plus/*                      | /math (1)                            |
|                                     | => /plus                             |
| /math/*/plus                        | /math (1)                            |
|                                     | => /plus_zero                        |
'-------------------------------------+--------------------------------------'

ひとつ目はさっきといっしょ

http://colinux:3000/math/12345/plus

Math?: 12345 + 0
12345

さいしょのに加えて引数がない場合は別の動作ができると

ddeqcaddeqca2007/04/11 12:47<a href=http://roccofoloper.sblog.cz>sauna belt</a> sauna belt http://roccofoloper.sblog.cz sauna belt

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20070105