2014-02-25 21 views
0

在Catalyst框架中有一个全局的init子(在任何控制器之前执行)。我想从DB设置一些config变量(例如晚餐管理员id或管理员电子邮件的GPG配置)。Catalyst:全局init操作

我试图使用auto和'开始'的行动,但这些行动只是为其相应的控制器执行。

Root.pm文件

sub auto :Private { 
    my ($self, $c) = @_; 

    my $config = $c->model('DB')->resultset('Config')->single(); 
    $c->config->{var1} = $config->var1; 

}; 

当我请求另一控制器等Controller2begin,所述$c->config->{var1}是空..

+1

这里似乎没有问题。 –

+0

我认为这是“如何从数据库设置配置变量?”,但这非常含糊。这将有助于更准确地了解遇到的问题。 – ikegami

回答

1

那种配置的属于在主程序中,即MyApp.pm,所以它在你考虑接受请求之前就已经设置好了。您通常不希望在每个请求周期内配置数据库连接。

你的问题是不完全清楚,但如果你做需要在每次请求配置数据库设置,然后auto子根控制器Root.pm将确保它发生在每个请求的顶部位置。

但我不禁感觉这里有一个X-Y问题...

+0

像GPG homedir,电子邮件管理员和晚餐管理员ID等信息应该是可配置的。 @RET我已经测试过'Root.pm'控制器中的'auto'子类,但是这个子类只对这个控制器执行。 – Abir

+1

@Abir我认为你对'auto'没有充分的理解,并且它在请求链中扮演着角色。因此,在你再次在这里进行探讨之前,请回顾一下你的问题的评论,并且请将你的问题重新写为“你试图达到的目标”,“你如何尝试”以及“有什么失败了“。你会得到更多的帮助。 –

+0

问题是'begin' sub在'auto'子之前被执行。所以当我检查'begin'中的'controller2'中'$ c-> config - > {var1}的值时,它是空的:p – Abir