催化剂全局子程序

时间:2012-08-13 20:31:47

标签: perl global catalyst subroutine

在我正在构建的Catalyst应用程序中,我有几个基本相同的子程序,但它们都在应用程序的不同部分。在Catalyst中是否有一个中心位置,我可以从应用程序的任何位置调用子例程?我想避免重复代码。谢谢!

3 个答案:

答案 0 :(得分:3)

不知道这是否是最佳做法,但我没有任何问题使我的主模块混乱这样的功能。然后可以从具有上下文对象(即任何地方)的任何地方轻松调用它们。

 package MyApp;
 ...
 sub my_frequently_used_sub {
     my ($c, @args) = @_;
     ...
 }


 package MyApp::Controller::Foo;
 ...
 sub some_action :Path {
     my ($self, $c, @args) = @_;
     ...
     my $result = $c->my_frequently_used_sub();
     ...
 }

答案 1 :(得分:2)

Catalyst现在基于Moose。您可以使用its roles作为解决方案。

答案 2 :(得分:1)

如果这些功能应该在Catalyst应用程序之外可用,例如因为模型使用它们,它们应该进入一个完全独立的模块。 如果它们确实是特定于Catalyst的,那么您可能希望创建可以转发或分离的私有操作,如403不允许或404未找到错误页面。 如果它们只是普通的Perl subs,你可以按照mob或Root控制器的建议将它们放在app类中。 您能说出一些功能,以便我们为您提供更好的解决方案吗?