Catalyst::Model::Adapterを使ってみたよ
=>追加記事 >>使えなかったので、いろいろやってみたよ(続・Model::Adapter使ってみたよ)
CatalystでDBを普通のRDBとかを使わずにYAMLファイルをDBみたいな感じにしたいと思って、Adapterを使ってモデルクラスを作ってみました。(自分の設計が変なせいですが)
参考にしたページ(感謝です!!)
[>>Catalyst::Model::Adaptorを使ってみたで、自分が打ち込んだヘルパーのコマンド。
./script/MyApp_create.pl model YAML::Loader Adaptor YAML::Loader newこれで、まず最初の型ができます。コンストラクタのnewは、なくても大丈夫。デフォルトでnewだから。もしnew以外なら設定が必要。
これでパーペキと思い、さぁ実行!!
./script/MyApp_server.pl -r Couldn't instantiate component "MyApp::Model::YAML::Loader", "Can't locate object method "1" via package "YAML::Loader" at /usr/lib/perl5/site_perl/5.8.8/YAML/Base.pm line 13." at ./script/MyApp_server.pl line 53 Compilation failed in require at ./script/MyApp_server.pl line 53.あれ??こけたよ。
調べると、Adaptor::Baseクラスの_create_instanceメソッドのreturnの中にある$self->mangle_arguments($args)にて引数を何も設定していないと1が返却されていたので、このメソッドをオーバライドして、1が返ってこないようにしたら、エラーが起きなくなりました。
package MyApp::Model::YAML::Loader; use strict; use warnings; use base 'Catalyst::Model::Adaptor'; __PACKAGE__->config( class => 'YAML::Loader', constructor => 'new', ); #なぜか1が設定されるのでオーバライド sub _create_instance { my ($self, $app) = @_; my $constructor = $self->{constructor} || 'new'; my $args = $self->prepare_arguments($app); my $adapted_class = $self->{class}; return $adapted_class->$constructor(); } 1;
今のところは、これで解決しているが、今後変更が必要かも。=>追加記事 >>使えなかったので、いろいろやってみたよ(続・Model::Adapter使ってみたよ)
[>Catalyst::Model::AdaptorでTheSchwartzをModel化