読者です 読者をやめる 読者になる 読者になる

ひさびさにCatalyst触ってみたら、Args(0)というのを発見した

久々にCatalystをインストールして、ロジックを書くときのアトリビュートでArgs(0)というのが増えていることに気づきました。

このArgs()で自分が今分かっている事を下記にまとめます。

  • Args()を設定したメソッド名プラス設定した数値の引数の数のURLにアクセスした場合、ディスパッチ制御ができる
  • メソッド名以下を$c->arguments->[0]とかで取得できる

まだこれぐらいしかわかってません。
perldocに書かれていますが、sub bar :Localをfooクラスに書いた場合に、/foo/bar/のURLでアクセスできますが、場合によっては、/foo/bar/はダメで/foo/bar/hoge/とかは許可した場合などにArgs(1)とかを使うといいみたいです。

なんだか、Regexアトリビュートとかでも似たようなものはできそう(??)ですが、Args()のほうが手軽にできそうですね。

具体的なコードは下記に。。。

sub bar :Local :Args(1) {
  my ($self, $c) = @_;
  my $arg = $c->req->arguments->[0];
  $c->res->body($arg);
}

このコードだと、http://例/foo/bar/test1/などでアクセスすると、画面に『test1』と表示されるようになります。

詳しくは、こちら⇒http://cpansearch.perl.org/dist/Catalyst-Manual/lib/Catalyst/Manual/Intro.pod