* Catalyst [#x12c6c7b]
* アプリケーション作成の流れ [#x12c6c7b]

** 最初に [#r404f35d]
あるウェブサイトで、会員情報を扱う画面(群)を作る事にする。このサイトのアプリケーション名はmyappとする。

** データベースを作る [#b3c50625]
データベースmyappdbを作り、そこにmemberテーブルを作る。

** モデルを作る [#saa7a3a0]
*** スキーマクラスを作る [#i9a2b994]
- データベースが持つテーブル名(モデルクラス名)などを書くファイル。
- ファイル名や配置場所のルールはないようだが、例えばlib/MyappDB.pmのようにする。 

 package MyappDB;
 
  use base qw/DBIx::Class::Schema/;
 __PACKAGE__->load_classes(
 {
    MyappDB => [qw/Member/],
 }
 );
 1;

*** テーブルクラスを作る [#xa56a0eb]
- テーブルを表すクラス。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;

*** モデルクラスを作る [#pa138846]
以下のようにヘルパースクリプトを実行する。
 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"はこのコマンドを実行する前に作っておいたスキーマクラスのクラス名を意味する。

** コントローラを作る [#a4c2d038]
 script/myapp_create.pl controller Member
MemberはURLの一部になる。(例:http://myapp/member/indexなど)

**ビューを作る [#t7fd4913]
 script/myapp_create.pl view TT TTSite

- TemplateToolkitのヘルパースクリプトはTTとTTSiteの2つある。上の例ではTTSiteを使用している。TT TTとすればTTを使用することになる。
- TTSiteは雛形になるテンプレートファイルを作ってくれる。ヘッダやフッタも含んでいるので、参考にして自分のアプリケーションに合わせたHTMlを書けばよい。

** 処理(ロジック)を書く [#me961868]
*** メイン処理 [#w708c8ed]
コントローラにあたる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';
 }

*** テンプレート表示用処理 [#pe9a35b3]
以下のようなendアクションを書き、自動的にテンプレートを表示するようにする。
 sub end : ActionClass('RenderView') {}

** テンプレートファイルを書く [#tbc1ee26]
lib/Myapp/Controller/Member.pm に以下のようにテンプレートファイルを書く。
 <ul>
 [% FOREACH member IN members -%]
 <li>[% member.login_id %]</li>
 [% END -%]
 </ul>

** ミニサーバを起動し、動作を確認する [#x8b00c64]
 script/myapp_server.pl -r

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS