我试图在每个请求使用Catalyst完成后调用一些代码.基本上,我想运行一些代码作为一部分finalize
.据说Catalyst :: Plugin :: Observe会这样做,但它看起来完全坏了(只是加载插件中断Catalyst).
我正在尝试修复Observe插件,但这证明是固执的.
那么,是否有更好的方法可以在每个请求结束时调用一些清理代码?
(注意:这是在模型中,而不是控制器,所以我不能只使用sub end { ... }
)
您实际上只需将代码直接添加到"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
我上面提到的那样做.
真正的问题是,为什么您的模型需要了解请求周期?这听起来非常紧密.