1

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

4

3 回答 3

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();
     ...
 }
于 2012-08-13T21:30:49.637 回答
2

Catalyst基于Moose现在。您可以使用它的角色作为解决方案。

于 2012-08-13T21:37:36.747 回答
1

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

于 2012-10-30T13:10:53.567 回答