我试图在使用Catalyst完成每个请求后调用一些代码。基本上,我想在finalize
中运行一些代码。据说Catalyst::Plugin::Observe会这样做,但它看起来完全坏了(只是加载插件中断催化剂)。
我正在尝试修复Observe插件,但这证明是固执的。
那么,是否有更好的方法可以在每个请求结束时调用一些清理代码?
(注意:这是在模型中,而不是控制器,所以我不能只使用sub end { ... }
)
答案 0 :(得分:7)
您实际上只需将代码直接添加到“MyApp”类:
package MyApp;
use Catalyst ...;
...
sub finalize {
my $c = shift;
$c->NEXT::finalize(@_);
# do your thing
}
这就是所有插件的工作方式;它们只是成为应用程序一部分的方法。
我同意让“finalize”生成一个要观察的事件更清晰......但这是我们现在要处理的事情:)加入irc.perl.org上的#catalyst,我们可以进一步讨论。 (我猜你是jrockway。)
编辑回复:
(注意:这是在模型中,而不是控制器,所以我不能只使用子端{...})
你知道$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
开始,如上所述。
真正的问题是,为什么您的模型需要了解请求周期?这听起来非常紧密。