Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Catalyst:全局初始化操作_Perl_Catalyst - Fatal编程技术网

Perl 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')->

在Catalyst框架中有一个全局
init
sub(在任何控制器之前执行)。我想从数据库中设置一些
config
变量(比如superwadmin
id
或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