Catalyst::Model::DBIC::Schemaを使ってみました。
DBIx::Classで新しくなったSchemaモデルをCatalystのModelとして使うクラスなのですが、今までのModelと大きく違うのはモデルをアプリケーションの外に追い出すことが出来る点です。
例えば、複数のアプリケーションで認証情報を使いまわしたい時には便利かと思われます。

まずはスキーマを作ります。(Perl/DBIC - Nekokak's core dumpに大変わかりやすい説明があります。)

Schema/
	Account.pm
	Account/
		Users.pm
Schema/Account.pm
package Schema::Account;

use strict;
use warnings;
use base 'DBIx::Class::Schema';

__PACKAGE__->load_classes();

1;
Schema/Account/Users.pm
package Schema::Account::Users;

use strict;
use warnings;
use base 'DBIx::Class';

__PACKAGE__->load_components(qw/ PK::Auto::MySQL Core/);
__PACKAGE__->table('users');
__PACKAGE__->add_columns(qw/id username password email/);
__PACKAGE__->set_primary_key('id');

1;

このスキーマをMyApp1とMyApp2で使いまわすことにします。

MyApp1
	Contoller
	Model
		Account.pm
	View

MyApp1
	Contoller
	Model
		Account.pm
	View

MyApp1とMyApp2でModelクラスを作ります。

# script/myapp1_create.pl model Account DBIC::Schema Schema::Account dbi:mysq:account user passwd

Account - クラス名
DBIC::Schema - Modelの指定
Schema::Account - Schemaクラス

以下のようなクラスが生成されます。

MyApp1/Model/Account.pm
package MyApp1::Model::Account;

use strict;
use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__->config(
    schema_class => 'Schema::Account',
    
    connect_info => [ 'dbi:mysql:account',
                      'user',
                      'passwd',
                      {
                          RaiseError         => 1,
                          PrintError         => 0,
                          ShowErrorStatement => 1,
                          TraceLevel         => 0,
                          AutoCommit         => 1,
                      }
                    ],
    
);
1;

使うときは

$c->model('Account')->resultset('Users')

さらに便利なのは

$c->mode('Account::Users')

でSchemaモデルが使えます。

もちろん実際に動かす時にはSchemaクラスはクラスパスが通るところにある必要があります。

と、とっても便利なC::M::DBIC::Schemaなんですが、既存のプラグインとあまり相性がよくありません。
特にC::P::Authentication::Store::DBICは全く動かなくなるので注意です。(今、パッチが作られているみたいです。)

              

              

トラックバック(0)

トラックバックURL: http://mt.hide-k.net/mt-tb.cgi/418

コメントする

プロフィール

このブログ記事について

このページは、hideが2006年2月14日 15:51に書いたブログ記事です。

ひとつ前のブログ記事は「LVMパーティションの復旧」です。

次のブログ記事は「C::P::Authentication::Store::DBICをSchemaベースに対応してみる」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。