【问题标题】:Catalyst: global init action催化剂:全局初始化动作
【发布时间】:2014-02-26 19:51:50
【问题描述】:

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

我尝试使用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} 是空的..

【问题讨论】:

  • 这里似乎没有问题。
  • 我认为这是“如何从 DB 中设置配置变量?”,但这很模糊。这将有助于更准确地了解遇到了什么问题。

标签: perl catalyst


【解决方案1】:

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

您的问题并不完全清楚,但如果您确实需要为每个请求配置数据库设置,那么根控制器 Root.pm 中的 auto 子将是确保它发生在每个请求的顶部。

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

【讨论】:

  • GPG homedir、email admin 和 Supper admin Id 等一些信息应该是可配置的。 @RET 我已经在Root.pm 控制器中测试了auto 子程序,但是这个子程序只为这个控制器执行。
  • @Abir 我认为您对auto 及其在请求链中的作用并不完全了解。因此,在您在这里进行更多探索之前,请回顾一下您问题上的 cmets,并将您的问题重新写为“您想要实现的目标”、“您是如何尝试的”和“有什么对你失败了”。这样你会得到更多帮助。
  • 问题是begin sub 在auto sub 之前执行。所以当我检查controller2controller2$c->config->{var1} 的值时,它是空的:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2020-01-05
  • 2020-12-14
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多