[Moscow.pm] Catalyst Model Dependencies

Dmitry Zhariy dzhariy на gmail.com
Чт Дек 4 02:21:19 PST 2008


На вашу граблю можно разве что поставить костыль :)
В модуле Catalyst.pm есть метод setup_components, который и выполняет
подгруздку все компонентов (в том числе и моделей) по средствам
Module::Pluggable::Object.

Так как Каталистовые приложения напрямую наследуются от Catalyst.pm,
то можно просто переопределить метод setup_components:


package MyApp;

use strict;
use warnings;

use Catalyst::Runtime '5.70';

use parent qw/Catalyst/;


__PACKAGE__->config( name => 'MyApp' );

# Start the application
__PACKAGE__->setup();


# Костыль:
sub setup_components {
    my $class = shift;

    # куча копи-паста  ....

    my $locator = Module::Pluggable::Object->new(
        search_path => [ map { s/^(?=::)/$class/; $_; } @paths ],
        %$config
    );

    my @comps = sort { length $a <=> length $b } $locator->plugins;
    my %comps = map { $_ => 1 } @comps;

    for my $component ( reverse @comps ) { # <---- вот тут
    # Опять копи-паст

    }
}
1;

Таким образом в строчке for my $component ( reverse @comps ) я меняю
последовательность загрузки модулей.

Нужно посмотреть на Module::Pluggable::Object, возможно там есть ответ.




On 12/4/08, Ivan B. Serezhkin <ivan на serezhkin.com> wrote:
> Привет.
>
> Наткнулся я на граблю.
> Есть каталист, в нём у меня уже 6 моделей,
> И случилось так, что инициализировать шестую я могу только если у меня
> есть третья запущенная.
> А каталист пытается эту шестую первой проинициализить.
>
> Кто нибудь умеет выставлять поледовательность инициализзации моделей ?
> Уж очень не хочется ей конструктор самому вызывать.
>
> --
> Ivan B. Serezhkin
> Spamooborona, Yandex. http://so.yandex.ru/
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>


Подробная информация о списке рассылки Moscow-pm