ダウンロード サンプルファイル (51.0 KB)
サンプルで確認
組み込みアクションの呼び出されるタイミングをサンプルで確認してみましょう。「Root.pm」と「Bar.pm」にbeginアクションとautoアクションを追加します。
package HelloC::Controller::Root;
# 省略
sub begin :Private {
my ( $self, $c ) = @_;
$c->log->debug ( 'begin in Root' );
}
sub auto :Private {
my ( $self, $c ) = @_;
$c->log->debug ( 'auto in Root' );
}
package HelloC::Controller::Foo::Bar;
# 省略
sub begin :Private {
my ( $self, $c ) = @_;
$c->log->debug ( 'begin in Foo::Bar' );
}
sub auto :Private {
my ( $self, $c ) = @_;
$c->log->debug ( 'auto in Foo::Bar' );
}
組み込みサーバを起動して、Webブラウザで次のURLを表示させてみてください。
http://<ホスト名またはIPアドレス><:Port>/hello
このときの組み込みサーバのコンソールには次のようなログが表示されていることと思います。
[info] *** Request 1 (0.200/s) [10894] [] *** [debug] "GET" request for "hello" from "192.168.123.XXX" [debug] Path is "hello" [debug] begin in Root [debug] auto in Root [info] Request took 0.023507s (42.541/s) .------------------------------------------------------------+-----------. | Action | Time | +------------------------------------------------------------+-----------+ | /begin | 0.000390s | | /auto | 0.000102s | | /hello | 0.000163s | | /end | 0.000551s | '------------------------------------------------------------+-----------'
まず最初にRootコントローラのbeginアクションが、次いでautoアクション、その後にURLで指定したhelloアクションが実行され、最後にendアクションが実行されています。
次に、Foo::Barコントローラのhelloアクションを実行してみましょう。
http://<ホスト名またはIPアドレス><:Port>/foo/bar/hello
[info] *** Request 3 (0.250/s) [10894] [] *** [debug] "GET" request for "foo/bar/hello" from "192.168.123.XXX" [debug] Path is "foo/bar/hello" [debug] begin in Foo::Bar [debug] auto in Root [debug] auto in Foo::Bar [info] Request took 0.004783s (209.074/s) .------------------------------------------------------------+-----------. | Action | Time | +------------------------------------------------------------+-----------+ | /foo/bar/begin | 0.000250s | | /auto | 0.000131s | | /foo/bar/auto | 0.000078s | | /foo/bar/hello | 0.000088s | | /end | 0.000199s | '------------------------------------------------------------+-----------'
Foo::Barコントローラにもbeginアクションを定義しているため、Rootコントローラのbeginアクションを上書きしています。また、Rootコントローラのautoアクションの後にFoo::Barコントローラのautoアクションが実行されています。
まとめ
本記事ではコントローラについて、アクション定義に必要なアトリビュートと組み込みアクションについて説明しました。Catalystでは、URLパスとアクションを結びつけるさまざまな方法が用意されていることがご理解いただけたと思います。
次回はURLパスについての補足と、リクエストパラメータの扱い、などについて説明する予定です。
参考文献
- 『Catalyst-Manual-5.8000』
- 『モダンPerl入門』 牧大輔 著、翔泳社、2009年2月
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
