2011-04-20 54 views
2

我應該在Catalyst項目中放置哪些功能,例如sum_it_all()Catalyst中的實用程序(Perl)

這不是一個模型,這與數據無關,它不是控制器,因爲它不詢問網絡請求。這只是一個簡單的功能,我希望它可以在我的所有控制器中使用。

現在我使用Model/Utils.pm和$c->model("utils")->sum_it_all(),但它似乎很荒謬。

+0

我不知道Catalyst,所以這可能沒有任何幫助,但是在symfony中,有一個包含lib/models和lib/forms的頂層lib,所以我只是直接把這類東西放在lib中。 – 2011-04-20 13:20:15

+0

當我第一次遇到Catalyst時,我完成了你所做的(創建一個模型)。模型在Catalyst中非常輕巧,所以它不是一個完全破碎的想法。但是,如Sid Burn所寫,在催化劑名稱空間外創建模塊確實更有意義。 – 2012-07-31 00:53:30

回答

4

如果您需要在Catalyst Controller中使用此功能,只需將其嵌入到您需要的控制器中即可。如果你在幾個控制器中需要相同的功能。創建一個包含所有功能的新模塊。如果您的項目名爲「Foo」,則創建例如「Foo :: Helpers」。

在每一個地方,你需要從你的助手的某些功能控制器只需要導入他們在Sub::Exporter「使用美孚::助手QW(和)」

查找導出函數。

+0

如果我這樣做,該模塊應該在哪個文件夾? – gideon 2012-12-22 04:39:05

+0

來自您的主項目根目錄。將模塊放在'lib/Foo/Helpers.pm'中 – 2012-12-23 11:58:21

+0

Thanks @Sid那麼我應該在頂部添加一個'use Foo :: Helpers;'並且像使用perl包一樣使用它?(與'$ c-> models(「Foo」..') – gideon 2012-12-23 12:00:24

3

如果它不是Catalyst特有的,只需使用它就可以在Catalyst環境之外使用。我建議Sub-Exporter

$ctx->model(...)意味着訪問基本上是催化劑和您的業務/模型邏輯之間的「膠水」層(::Model::)。如果你不需要任何粘連(自動配置和組件膨脹以方便訪問是一種常見的用例),那麼你可以像每個Perl應用程序一樣將它抽象出來。

0

我建議你簡單地添加功能和其他有用的催化下插件 ,您可以使用語法$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; 
+2

我不推薦這個。通常情況下,你會寫很多隻能在Catalyst和其他地方使用的代碼。即使是「總和」功能也適合這一點。因爲爲什麼應該有人編寫一個只能在Catalyst Controller中使用的總和函數?只有編寫一個Catalyst插件才能使其在任何其他上下文中都沒有意義。 – 2011-05-31 22:48:49

0

我已在Utils.pm助手包功能,通過催化劑我想訪問使用$ C-> utils的訪問的所有方法。

對於如:

package Utils 

sub method1 { 
} 

sub method2 { 
} 

在催化劑,我想用$c->utils->method1(<params>)$c->utils->method2(<params>)

請讓我知道做到這一點的最好方法調用方法1。

+2

嗯...答案或問題?如果後者,請發佈... [問題](http://stackoverflow.com/questions/ask):-) – kleopatra 2013-09-13 07:57:03

相關問題