Утилиты в Catalyst (Perl) - PullRequest
       9

Утилиты в Catalyst (Perl)

2 голосов
/ 20 апреля 2011

Где я должен разместить функции, например, sum_it_all() в проекте Catalyst?

Это не модель, это ничего не касается данных, это не контроллер, потому что он не запрашивает веб-запрос,Это просто простая функция, и я хочу, чтобы она была доступна во всех моих контроллерах.

Теперь я использую Model / Utils.pm и $c->model("utils")->sum_it_all(), но это кажется очень смешным.

Ответы [ 4 ]

4 голосов
/ 18 мая 2011

Если вам нужны эти функции в контроллере Catalyst, просто вставьте его в контроллер, где вам это нужно. Если вам нужна одна и та же функция в нескольких контроллерах. Создайте новый модуль, который содержит все ваши функции. Если ваш проект называется «Foo», то создайте, например, «Foo :: Helpers».

В каждом контроллере, где вам нужны некоторые функции из вашего помощника, просто импортируйте их "use Foo :: Helper qw (sum)"

Посмотрите на Sub :: Exporter для экспорта функций.

3 голосов
/ 20 апреля 2011

Если это не что-то конкретное для Catalyst, просто используйте его, как если бы вы были вне контекста Catalyst. Я бы порекомендовал Субэкспортер .

$ctx->model(...) предназначен для доступа к слою (::Model::), который по сути является «связующим звеном» между Catalyst и логикой вашей бизнес-модели. Если вам не нужен какой-либо клей (автоматическое конфигурирование и раздувание компонентов для более легкого доступа - типичный пример использования), вы можете абстрагировать его, как в любом приложении Perl.

0 голосов
/ 13 сентября 2013

У меня есть набор функций в пакете Utils.pm Helper, через катализатор я хочу получить доступ ко всем методам, используя $ c-> utils accessor.

Например:

package Utils

sub method1 {
}

sub method2 {
}

В катализаторе я хотел бы вызвать method1, используя $c->utils->method1(<params>) или $c->utils->method2(<params>)

Пожалуйста, дайте мне знать, как лучше всего выполнитьэто.

0 голосов
/ 01 июня 2011

Я рекомендую вам просто добавить эту функцию и другие полезные функции в качестве плагина Catalyst, и вы можете получить к нему доступ, используя синтаксис $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;
...