roman has asked for the wisdom of the Perl Monks concerning the following question:

Do you think it is sane to store and use Catalyst application class in controller (in Moose attribute)? I can use the property to link to other application components "statically" without using $c and also store them in attributes.

I mean something like this:

package MyApp::Controller::Region; use Moose; BEGIN { extends qw(Catalyst::Controller); } has app_class => ( is => 'ro' ); has regions => ( is => 'ro', required => 1, lazy => 1, isa => 'ArrayRef', auto_deref => 1, default => sub { # using model and storing bit of data in attributes return [ shift()->region_rs->all ]; } ); # remembering app_class around BUILDARGS => sub { my $next = shift; return { %{ $next->(@_) }, app_class => $_[1], }; }; sub region_rs { # accessing the model return shift()->app_class->model('DB::Region'); }

Do you see any potential danger in this?

Replies are listed 'Best First'.
Re: Using Catalyst application class in controllers
by Anonymous Monk on Oct 13, 2011 at 12:28 UTC
    Are you building a non-weakened circular reference?
      No. The value of app_class is not a reference, it is a string, the name of the Catalyst application class.