Chained

今まで Chained って使ってみたことなかったので、やってみた。
まず、こんなことしたい。

パス 内容
/* /hogehoge hogehoge ページを出力
/*/edit /hogehoge/edit hogehoge ページを編集

Chained について調べていったけど、例が /page/*/edit みたいなものが多くて、いきなり Args が必要になるケースはどうすればいいのかよくわからなかった。
で、あれこれしてこうしたらできた。

sub root : PathPart('') Chained CaptureArgs(1) {
    my ( $self, $c, $arg) = @_;

    $c->stash->{page_name} = $arg;
}
    
sub page : PathPart('') Chained('root') Args(0) {
    my ( $self, $c) = @_;

    $c->response->body($c->stash->{page_name});
}
    
sub page_edit : PathPart('edit') Chained('root') Args(0) {
    my ( $self, $c ) = @_;
    
    $c->response->body($c->stash->{page_name}. '::edit');
}

これでいいのかな? root と page をまとめられるのかなーと思うけど、うまくできなかったのでこうした。