2014-02-25 53 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