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

最初に

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