我正在尝试从像这样的模型(设计示例)中访问Catalyst配置哈希:
package Dabadie::Model::DirFind;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Model';use namespace::autoclean;
sub list {
my ($self, $c) = @_;
return $c->config();
}
但是,$ c是undef,$ self-> config不返回任何内容。
任何人都可以帮忙解决这个问题吗?
谢谢,
西蒙
答案 0 :(得分:2)
这是预期的 - 根据MVC设计理念,您的模型应该与控制器逻辑分离。
当您在控制器代码中初始化模型时,可以将$ c作为参数传递,但这会导致您违反模式的“互连”模型和控制器设计,但这样做可能是有意义的 - 是您的模型设置配置参数或只是接收它们?如果您通过模型设置配置参数,则可能存在设计问题。
或者只是将配置哈希作为参数传递而不是模型初始化:
$c->model('AppModel')->new(config => $configParameters);
这将要求您在模型中声明moose属性以捕获构造中的config参数。
has 'config' ( isa => 'HASH', is => 'ro' );
有关Moose属性的更多信息here