アプリケーション作成の流れ

最初に

あるウェブサイトで、会員情報を扱う画面(群)を作る事にする。このサイトのアプリケーション名は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

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

Last-modified: 2011-06-11 (土) 14:14:12