为什么我不能从模型内部访问催化剂模型的配置?

时间:2013-03-26 10:21:48

标签: perl catalyst

我有一个看起来像这样的课程:

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>

我可以访问整个应用程序配置哈希(我知道this回答),但我似乎无法直接访问类'配置,所以

 $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'
                   );

一切正常。

任何人都可以帮忙解释一下吗?

1 个答案:

答案 0 :(得分:1)

Catalyst组件的配置传递给它的构造函数。你应该在你的模型中做:

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

并在您的方法中使用$self->class$self->root。访问组件中的__PACKAGE__->config(启动期间除了一次,设置配置)是错误的。查看$c->config更进一步。