使えなかったので、いろいろやってみたよ(続・Model::Adapter使ってみたよ)

今日の前の記事にて、YAML::Loaderを使ってモデルクラスを作ってみたけど、Catalystの中でモデルとして使用するのが困難なため、いろいろとやってみましたので、まとめます。

まず、YAMLファイルを読み込む設定は、やはりMyApp.ymlに書きたいなと。

そこで、いろいろ調べたり考えた結果、自分で適当なクラスを作ることにしました。

MyApp::YAML::Loader(すみません、クラス名変ですね)

package MyApp::YAML::Loader;

use strict;
use warnings;
use YAML;

sub new {
    my $class = shift;
    $class = ref($class) || $class;

    my $file = shift;
    my $yaml = YAML::LoadFile($file);

    my $self = bless {yaml => $yaml}, $class;
    return $self;
}

1;

まぁ、単純ですね。独学で勉強しているのでかなり独特かもしれません。

そして、CatalystのModel::Adapterのヘルパースクリプトで作ったクラスの中身。

package MyApp::Model::YAML;
use strict;
use warnings;
use base 'Catalyst::Model::Adaptor';


__PACKAGE__->config(
    class       => 'MyApp::YAML::Loader',
    constructor => 'new',
);

1;

そして、CatalystのMyApp.ymlに読み込むYAMLファイルを書き込みます。

Model::YAML:
 args: ./root/yaml/test.yml

ここまで出来たら、あとはコントロールから下記のようにやれば値が取得できるようになります。

sub default : Private {
    my ( $self, $c ) = @_;
    my $model = $c->model('YAML');
    $c->stash->{yaml} = $model->{yaml}->{test};
    $c->stash->{template} = 'index.tt';
}

一応、これで画面に値が表示されます。

ん〜、こんなんでいいのかなぁ〜。

ご指摘いただけたら、うれしいです。