TOPシステム開発> Path(/path)アトリビュート
まるごとPerl!
使ってわかるCatalyst

第3回:コントローラクラスへの理解を深める
著者:アドウェイズ  加藤 敦   2006/9/13
前のページ  1  2
Path(/path)アトリビュート

   Pathも標準的なクラス名とメソッド名の対応を無視します。引数とパスが一致した場合に、このアクションが実行されます。引数を「/」から始めれば、Globalのようにクラス名を無視します。「/」から始めなければクラス名をパスとして使い、引数は相対パスとみなされます。

Regex('^/match/absolute/path$')アトリビュート

   Globalと似ていますが、引数の正規表現がパスとマッチした場合にアクションが呼ばれます。


LocalRegex('^match/relative/path')アトリビュート

   Globalに対するLocalと同様で、Regexに対するLocalRegexです。引数の正規表現とマッチした場合にアクションが呼ばれますが、クラス名とパスの対応を無視しません。

   なお、RegexやLocalRegexで正規表現を使うのは、「^user/(\w+)/method」のように途中にユーザーIDが入るような場合だと思います。こういう時、「(\w+)」の中身を取得できないと意味がありませんね。そこで次のようにします。

$c->req->snippets->[0];

   snippestsは配列リファレンスを返します。ここに、マッチした文字列が入っています。

   以上が、主なアトリビュートの説明です。


Bookmark::Controller::Root

   さて、一通り分かった所でContorollerディレクトリの下のRoot.pmを見てみましょう(リスト6)。先ほど見たように、これはパスが「/」用のクラスです。

リスト6:デフォルトのRoot.pm(抜粋)
package Bookmark::Controller::Root;

use strict;
use warnings;
use base 'Catalyst::Controller';

__PACKAGE__->config->{namespace} = '';

sub default : Private {
   my ( $self, $c ) = @_;
   # Hello World
   $c->response->body( $c->welcome_message );
}

# sub end : Private {
#      my ( $self, $c ) = @_;
#
#      # Forward to View unless response body is already defined
#      $c->forward( $c->view('') ) unless $c->response->body;
# }

   前述のdefaultが定義されています。さきほどhttp://localhost:3000/をブラウザーでアクセスしましたが、その後ろに適当な文字列を入れて(例えば「http://localhost:3000/xyz」や「http://localhost:3000/hogehoge」など)アクセスしてみて下さい。同じページが表示されるはずです。xyzもhogehogeも定義されていないため、defaultが呼ばれているわけです。

   もう一つ、コメントになっていますが、end:Privateが定義されています。これは、名前の通り、最後に自動的に呼ばれるアクションです。通常はここで、ビュー関係の処理を行います。

前のページ  1  2

株式会社アドウェイズ 加藤 敦
著者プロフィール
株式会社アドウェイズ   加藤 敦
アフィリエイトシステムやモバイルサイトの構築などを経て、現在、技術マネージャーとして新規サービスの設計、システムの標準化などに携わる。個人的にCPANモジュールの開発や、オープンソースのプロジェクトに参加している。


INDEX
第3回:コントローラクラスへの理解を深める
  コントローラークラス
Path(/path)アトリビュート