我有一个大型的Catalyst应用程序,它具有自己的日志记录系统(内置的Catalyst日志除外);设置例程使日志对象在存储区中可用为$c->stash->{log}
。 (不同的控制器具有不同的日志对象,并且输出到达不同的位置。)
此应用程序具有大型实用程序包,具有许多通常用于处理各种任务的小功能(沿着get_name_from_id
或cleanse_input
或convert_date
行)。该软件包仅专用于该Catalyst应用,即,任何外部应用都不共享。
有没有一种方法可以使日志对象可用于整个实用程序包,而不必每次都手动传递它?我认为有一些整洁的麋鹿可以做到这一点,但是我的麋鹿很穷。...
不要将其放在藏匿处。拆分实用程序库。在需要共享功能的地方使用roles。
package Loggable {
use Moose::Role;
sub log {
... # implementation goes here
}
}
package SomeController {
use Moose;
with 'Loggable';
...
}
my $c = SomeController->new;
$c->can('log') # true