Amon2の流れを掴む - 4
前回の続きから。
今回は lib/sample.pm
の中身を見て行きます。
sample
package sample; use strict; use warnings; use utf8;
おなじみですね。
our $VERSION='0.01';
バージョンの指定をしています。
module
として CPAN
に上げたりする際にはきちんとバージョン指定しておくと親切かと思われます。
また、開発中だったりする場合は、 '0.01_01'
みたいな感じで _(アンダーバー)
を入れたりするみたいです。
use 5.008001;
Perl
の特定バージョン以上での実行を保証しています。
今回の場合、 perl 5.8
より低いバージョンで実行するとエラーになります。
use sample::DB::Schema; use sample::DB;
sample::DB
は O/Rマッパーの Teng
を継承しています。
sample::DB::Schema
ではTeng用のSchema設定をしています。
- O/Rマッパーって?
O/Rマッパーとは、 データベース(Relational DataBase) を オブジェクト(Object) に紐付けることで、データベースの操作をより容易に安全に行うことが出来るフレームワークです。
use parent qw/Amon2/;
そして Amon2
を継承します。
# Enable project local mode. __PACKAGE__->make_local_context();
次に Amon2::make_local_context
を呼んでいます。
こちらにも説明がある通り、2つ以上のアプリケーションを1つの PSGIアプリケーション
で実現する際に必要になります。
基本的に1つのアプリケーションしか考えていない場合は必要がないかもしれません。
my $schema = sample::DB::Schema->instance;
ここでは Teng::Schema
のオブジェクトを取得しています。
後に出てくる Tengオブジェクト
生成時に使用します。
sub db { my $c = shift; if (!exists $c->{db}) { my $conf = $c->config->{DBI} or die "Missing configuration about DBI"; $c->{db} = sample::DB->new( schema => $schema, connect_info => [@$conf], # I suggest to enable following lines if you are using mysql. # on_connect_do => [ # 'SET SESSION sql_mode=STRICT_TRANS_TABLES;', # ], ); } $c->{db}; }
最後に dbメソッド
を定義しています。
流れを読むと、
- sampleのコンテキストから
db
を呼ぶ - すると
Tengオブジェクト
が返ってくる - 2回目以降は
$c->{db}
にキャッシュしているので、それを返している
という感じだと思われます。
また、 $c->config
で configディレクトリ
以下の設定ファイルから設定を呼び出しているので、接続する DB
を変えたければ、そちらを編集して行けば良いです。
今回は短め。次回は Web
の方を見に行ってみます。