Catalyst: глобальная инициализация

В среде Catalyst есть глобальная подсистема init (выполняется перед любым контроллером). я хочу установить некоторую переменную 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;

};

Когда я запрашиваю другой контроллер, такой как Controller2 и begin, $c->config->{var1} был пуст..


person Abir    schedule 25.02.2014    source источник
comment
Кажется, здесь нет вопроса.   -  person Len Jaffe    schedule 25.02.2014
comment
Я думаю, что это как установить переменную конфигурации из БД?, но это довольно расплывчато. Было бы полезно узнать немного точнее, с какой проблемой столкнулись.   -  person ikegami    schedule 25.02.2014


Ответы (1)


Такая конфигурация принадлежит основной программе, то есть MyApp.pm, поэтому она устанавливается до того, как вы даже подумаете о принятии запроса. Обычно вы не хотите настраивать подключение к базе данных во время каждого цикла запроса.

Ваш вопрос не совсем ясен, но если вам нужно настраивать параметры базы данных для каждого запроса, то подпрограмма auto в корневом контроллере Root.pm будет местом, обеспечивающим выполнение этого в начале каждого запроса. запрос.

Но я не могу отделаться от ощущения, что здесь проблема X-Y...

person RET    schedule 26.02.2014
comment
Некоторая информация, такая как домашний каталог GPG, адрес администратора электронной почты и идентификатор администратора Supper... должна быть настраиваемой. @RET Я уже тестировал подпрограмму auto в контроллере Root.pm, но эта подпрограмма выполняется только для этого контроллера. - person Abir; 26.02.2014
comment
@Abir Я думаю, что у вас нет полного понимания auto и его роли в цепочке запросов. Поэтому, прежде чем вы начнете ковыряться здесь, просмотрите комментарии к вашему вопросу и, пожалуйста, переформулируйте свой вопрос так: «Чего вы пытаетесь достичь, как вы пытались это сделать и что не удалось для вас». Так вы получите больше помощи. - person Neil Lunn; 26.02.2014
comment
проблема в том, что begin sub выполняется до auto sub. поэтому, когда я проверяю значение $c->config->{var1} в controller2 в begin sub, оно было пустым: p - person Abir; 26.02.2014