1

私は次のようなクラスを持っています:

package MyApp::Model::Skunk::Find::Images;

use Moose;
use namespace::autoclean;

extends 'Catalyst::Model::Factory';

use Data::Dump qw/dump/;

sub prepare_arguments {
    my ($self, $c) = @_;

    # these are for debugging purposes only

    $c->log->info("package: " . __PACKAGE__);
    $c->log->info("catalyst config: " . dump $c->config);
    $c->log->info("images class: " . __PACKAGE__->config->{class});
    $c->log->info("images root: " .  __PACKAGE__->config->{root});

    return { root => __PACKAGE__->config->{root} };
}

myapp.confは次のようになります(スニペット):

<Model::Skunk::Find::Images>
    root    '/foo/bar/myapp/data/img'
    class   MyApp::Find
</Model::Skunk::Find::Images>

アプリケーション構成ハッシュ全体にアクセスできますが(この回答を認識しています)、クラスの構成に直接アクセスできないようです。

 $c->log->info("images class: " . __PACKAGE__->config->{class});
 $c->log->info("images root: " .  __PACKAGE__->config->{root});

MyApp :: Skunk :: Find::Images内からはどちらも何も生成しません。

パッケージ内から次のように変数を構成すると、次のようになります。

__PACKAGE__->config( 
                    class => 'MyApp::Find',
                    root  => '/foo/bar/myapp/data/img'
                   );

すべてが正常に動作します。

誰かが説明するのを手伝ってもらえますか?

4

1 に答える 1

1

Catalystコンポーネントの構成は、そのコンストラクターに渡されます。モデルで行う必要があります。

has ['class','root'] => (
   isa => 'Str',
   is => 'ro',
);

とあなたのメソッドで使用$self->classし、$self->root。コンポーネント内へのアクセス(起動中、構成を設定__PACKAGE__->configするための1回を除く)は間違いです。覗き込むことはさらにマークから外れています。$c->config

于 2013-04-20T14:26:03.710 に答える