Drkcore

17 03 2006 Catalyst perl Tweet

Catalystのアクションの優先度(2)

Catalystのアクションの優先度でまたもはまったのでメモ。

最上位のコントローラー(要するにcatalyst.plでつくられる)にRegexでアクションを定義すると、script/xxxx_create.pl controller test とかでlib/Controllerの下に作成したtest.pmのデフォルトよりも優先されてしまう。

例えば

lib/Test.pm

sub Regex : Regex('^(¥w+)$'){ my ( $self, $c ) = @_; # Hello World $c->response->body($c->req->snippets->[0]); }

lib/Test/Controller/priv.pm

sub default : Private { my ( $self, $c ) = @_; $c->response->body( "Test::Controller::priv" ); }

とかやっておいて、/privにアクセスするとRegexが実行されてしまう。

色々悩んだ挙句、

sub priv : Path('/priv'){ my ( $self, $c ) = @_; $c->response->body( "Test::Controller::priv" ); }

みたいに、Pathでルートからの位置を指定して優先度をあげることで解決。せっかくControllerで別にしてるんだから、

コントローラー内のデフォルトはコントローラー内ではデフォルトの動作をしてほしいナァ

Regexに持ってかれちゃったりすると気持ち悪いなぁと思ったり。

あと試行錯誤してて気づいたんだけど最上位のコントローラーでLocalRegexを指定すると何にもマッチしないようなんだけどこの認識であってるのかな?

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021