我應該在Catalyst項目中放置哪些功能,例如sum_it_all()
?Catalyst中的實用程序(Perl)
這不是一個模型,這與數據無關,它不是控制器,因爲它不詢問網絡請求。這只是一個簡單的功能,我希望它可以在我的所有控制器中使用。
現在我使用Model/Utils.pm和$c->model("utils")->sum_it_all()
,但它似乎很荒謬。
我應該在Catalyst項目中放置哪些功能,例如sum_it_all()
?Catalyst中的實用程序(Perl)
這不是一個模型,這與數據無關,它不是控制器,因爲它不詢問網絡請求。這只是一個簡單的功能,我希望它可以在我的所有控制器中使用。
現在我使用Model/Utils.pm和$c->model("utils")->sum_it_all()
,但它似乎很荒謬。
如果您需要在Catalyst Controller中使用此功能,只需將其嵌入到您需要的控制器中即可。如果你在幾個控制器中需要相同的功能。創建一個包含所有功能的新模塊。如果您的項目名爲「Foo」,則創建例如「Foo :: Helpers」。
在每一個地方,你需要從你的助手的某些功能控制器只需要導入他們在Sub::Exporter「使用美孚::助手QW(和)」
查找導出函數。
如果它不是Catalyst特有的,只需使用它就可以在Catalyst環境之外使用。我建議Sub-Exporter。
$ctx->model(...)
意味着訪問基本上是催化劑和您的業務/模型邏輯之間的「膠水」層(::Model::
)。如果你不需要任何粘連(自動配置和組件膨脹以方便訪問是一種常見的用例),那麼你可以像每個Perl應用程序一樣將它抽象出來。
我建議你簡單地添加功能和其他有用的催化下插件 ,您可以使用語法$c->sum_it_all()
(見下面的示例插件)
========示例自定義插件訪問====
package Catalyst::Plugin::HelpUtils;
use strict;
use warnings;
our $VERSION = '1.0';
=head1 NAME
Catalyst::Plugin::HelpUtils
=head1 SYNOPSIS
use Catalyst qw/
Helputils
/;
To use any of the utilities in this plugin e.g:
$c->sum_it_all()
=cut
sub sum_it_all{
my @items = @_;
my $result = 0;
foreach(@items) {
$result += $_;
}
return $result;
}
1;
我不推薦這個。通常情況下,你會寫很多隻能在Catalyst和其他地方使用的代碼。即使是「總和」功能也適合這一點。因爲爲什麼應該有人編寫一個只能在Catalyst Controller中使用的總和函數?只有編寫一個Catalyst插件才能使其在任何其他上下文中都沒有意義。 – 2011-05-31 22:48:49
我已在Utils.pm助手包功能,通過催化劑我想訪問使用$ C-> utils的訪問的所有方法。
對於如:
package Utils
sub method1 {
}
sub method2 {
}
在催化劑,我想用$c->utils->method1(<params>)
或$c->utils->method2(<params>)
請讓我知道做到這一點的最好方法調用方法1。
嗯...答案或問題?如果後者,請發佈... [問題](http://stackoverflow.com/questions/ask):-) – kleopatra 2013-09-13 07:57:03
我不知道Catalyst,所以這可能沒有任何幫助,但是在symfony中,有一個包含lib/models和lib/forms的頂層lib,所以我只是直接把這類東西放在lib中。 – 2011-04-20 13:20:15
當我第一次遇到Catalyst時,我完成了你所做的(創建一個模型)。模型在Catalyst中非常輕巧,所以它不是一個完全破碎的想法。但是,如Sid Burn所寫,在催化劑名稱空間外創建模塊確實更有意義。 – 2012-07-31 00:53:30