在我正在构建的Catalyst应用程序中,我有几个基本相同的子程序,但它们都在应用程序的不同部分。在Catalyst中是否有一个中心位置,我可以从应用程序的任何位置调用子例程?我想避免重复代码。谢谢!
答案 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)
答案 2 :(得分:1)
如果这些功能应该在Catalyst应用程序之外可用,例如因为模型使用它们,它们应该进入一个完全独立的模块。 如果它们确实是特定于Catalyst的,那么您可能希望创建可以转发或分离的私有操作,如403不允许或404未找到错误页面。 如果它们只是普通的Perl subs,你可以按照mob或Root控制器的建议将它们放在app类中。 您能说出一些功能,以便我们为您提供更好的解决方案吗?