Как очистить по окончании запроса в Catalyst? - PullRequest
2 голосов
/ 15 января 2009

Я пытаюсь вызвать некоторый код после завершения каждого запроса с использованием Catalyst. По сути, я хочу запустить некоторый код как часть finalize. Предположительно Catalyst :: Plugin :: Observe сделает это, но кажется, что он полностью поврежден (просто загрузка плагина ломает Catalyst).

Я пытаюсь исправить плагин Observe, но он оказывается упрямым.

Итак, есть ли лучший способ получить код очистки, вызываемый в конце каждого запроса?

(Примечание: это модель, а не контроллер, поэтому я не могу просто использовать sub end { ... })

1 Ответ

7 голосов
/ 15 января 2009

Вы можете просто добавить код прямо в ваш класс "MyApp":

package MyApp;
use Catalyst ...;

...

sub finalize {
    my $c = shift;
    $c->NEXT::finalize(@_);
    # do your thing
}

Так работают все плагины; это всего лишь методы, которые становятся частью вашего приложения.

Я согласен, что создание finalize для генерации события, которое нужно наблюдать, является более чистым ... но это то, с чем мы должны сейчас работать :) Присоединяйтесь к #catalyst на irc.perl.org, и мы можем обсудить его дальше. (Как вы, наверное, догадались, я - джоквей)

Отредактировано, чтобы ответить:

(Примечание. Это модель, а не контроллер, поэтому я не могу просто использовать вспомогательный конец {...})

Вы знаете, что у вас есть $c в end, верно?

package Your::Model;

sub cleanup {
   my $self = shift;
   ...
}

package Your::Controller;

sub end :Private {
    my ($self, $c) = @_;
    $c->model('Your::Model')->cleanup( ... )
}

Или вы можете сделать это с MyApp::finalize, как я предлагал выше.

Реальный вопрос в том, почему ваша модель должна знать о цикле запросов? Это звучит как ужасно тесная связь.

...