我有一个看起来像这样的课程:
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'
);
一切正常。
任何人都可以帮忙解释一下吗?
答案 0 :(得分:1)
Catalyst组件的配置传递给它的构造函数。你应该在你的模型中做:
has ['class','root'] => (
isa => 'Str',
is => 'ro',
);
并在您的方法中使用$self->class
和$self->root
。访问组件中的__PACKAGE__->config
(启动期间除了一次,设置配置)是错误的。查看$c->config
更进一步。