- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl-Catalyst/その他/基本 へ行く。
- 1 (2007-02-28 (水) 08:33:45)
Catalyst
最初に
あるウェブサイトで、会員情報を扱う画面(群)を作る事にする。このサイトのアプリケーション名はmyappとする。
データベースを作る
データベースmyappdbを作り、そこにmemberテーブルを作る。
モデルを作る
スキーマクラスを作る
- データベースが持つテーブル名(モデルクラス名)などを書くファイル。
- ファイル名や配置場所のルールはないようだが、例えばlib/MyappDB.pmのようにする。
package MyappDB; use base qw/DBIx::Class::Schema/; __PACKAGE__->load_classes( { MyappDB => [qw/Member/], } ); 1;
テーブルクラスを作る
- テーブルを表すクラス。lib/MyappDB/Member.pmというファイルを作る。
- 必要なテーブルの分だけ作る。
- スキーマクラスをDBIx::Class::Schema::Loaderを継承して作ると、テーブルクラスを作る必要はなくなるようだが、細かな設定ができなくなるようだ。
package MyappDB::Member; use strict; use warnings; use base 'DBIx::Class'; __PACKAGE__->load_components(qw/ PK::Auto Core/); __PACKAGE__->table('member'); __PACKAGE__->add_columns(qw/ member_id name age /); __PACKAGE__->set_primary_key('login_id'); 1;
モデルクラスを作る
以下のようにヘルパースクリプトを実行する。
script/myapp_create.pl model MyappDB DBIC::Schema MyappDB 'dbi:Pg:dbname=myapp_db;host=localhost' 'pgsql' 'passwd'
すると、lib/Myapp/Model/MyappDB.pmというモデルクラスができる。
- 上のコマンドのうち、最初の"MyappDB"はモデルクラスのクラス名(すなわちファイル名)を意味する。
- 2番目の"MyappDB"はこのコマンドを実行する前に作っておいたスキーマクラスのクラス名を意味する。
コントローラを作る
script/myapp_create.pl controller Member
MemberはURLの一部になる。(例:http://myapp/member/indexなど)
ビューを作る
script/myapp_create.pl view TT TTSite
- TemplateToolkitのヘルパースクリプトはTTとTTSiteの2つある。上の例ではTTSiteを使用している。TT TTとすればTTを使用することになる。
- TTSiteは雛形になるテンプレートファイルを作ってくれる。ヘッダやフッタも含んでいるので、参考にして自分のアプリケーションに合わせたHTMlを書けばよい。
処理(ロジック)を書く
メイン処理
コントローラにあたるlib/Myapp/Controller/Member.pm を開き、以下のようにコントローラアクションを書く。
sub list : Local { my ( $self, $c ) = @_; $c->stash->{members} = [$c->model('MyappDB::Member')->all]; $c->stash->{template} = 'member/list.tt2'; }
テンプレート表示用処理
以下のようなendアクションを書き、自動的にテンプレートを表示するようにする。
sub end : ActionClass('RenderView') {}
テンプレートファイルを書く
lib/Myapp/Controller/Member.pm に以下のようにテンプレートファイルを書く。
<ul> [% FOREACH member IN members -%] <li>[% member.login_id %]</li> [% END -%] </ul>
ミニサーバを起動し、動作を確認する
script/myapp_server.pl -r