Perl Catalyst:全局初始化操作
在Catalyst框架中有一个全局Perl Catalyst:全局初始化操作,perl,catalyst,Perl,Catalyst,在Catalyst框架中有一个全局initsub(在任何控制器之前执行)。我想从数据库中设置一些config变量(比如superwadminid或GPG配置的管理员电子邮件) 我尝试使用auto和“begin”操作,但这些操作只是针对其相应的控制器执行的 在Root.pm文件中: sub auto :Private { my ($self, $c) = @_; my $config = $c->model('DB')->resultset('Config')->
init
sub(在任何控制器之前执行)。我想从数据库中设置一些config
变量(比如superwadminid
或GPG配置的管理员电子邮件)
我尝试使用auto
和“begin”操作,但这些操作只是针对其相应的控制器执行的
在Root.pm
文件中:
sub auto :Private {
my ($self, $c) = @_;
my $config = $c->model('DB')->resultset('Config')->single();
$c->config->{var1} = $config->var1;
};
当我请求另一个控制器时,比如
Controller2
和begin
,$c->config->{var1}
是空的。这种配置属于主程序,即MyApp.pm
,因此它在您考虑接受请求之前就设置好了。您通常不希望在每个请求周期中配置数据库连接
您的问题并不完全清楚,但是如果您确实需要在每个请求上配置数据库设置,那么根控制器root.pm
中的auto
子节点将确保它发生在每个请求的顶部
但我忍不住觉得这里有一个X-Y问题…这里似乎没有问题。我认为这是“如何从DB设置配置变量?”,但这相当模糊。这将有助于更准确地了解遇到的问题。一些信息,如GPG homedir、电子邮件管理员和Super管理员Id。。。应该是可配置的@RET我已经在
Root.pm
控制器中测试了auto
sub,但是这个sub只针对这个控制器执行。@Abir我认为您对auto
及其在请求链中的作用还没有完全了解。因此,在你继续在这里闲逛之前,请回顾一下对你问题的评论,并将你的问题重新写为“你正在努力实现什么”、“你是如何尝试的”和“你失败了什么”。问题是begin
sub在auto
sub之前执行begin
sub。所以当我在begin
sub中检查$c->config->{var1}
中的controller2
的值时,它是空的:p