I have a controller base class that needs to stash some data per request. My question is where to put that data (stash would seem best) -- and how to name it.
This class is an auto-CRUD-like controller base class that does the mundane work of fetching objects. For example: package MyApp::Controller::CD; use parent 'My::Controller::CRUD'; 1; Which then will provided an action that handles "GET /cd/$id" which will fetch the CD object and place it someplace. For example, I could just put it in $c->stash->{item}. Now, controllers can be chained together, so for example I might have a chain /cd/*/track/*/movement/* which all use the same base class, and where in the "movement" action I might want to be able to fetch the cd and track objects fetched when processing the chain. So, $c->stash->{item} isn't such a good name. One option might be for the base class to use its class name as a namespace in the stash. That is, $c->stash->{CD}->{item} and $c->stash->{Track}->{item}; Another option is to add attributes to the base class so I can then do: $c->controller( 'CD' )->item and $c->controller( 'Track' )->item; But, I'd need to be sure and clear those at the start of every request since this is per-request data, unlike other attributes of the controller instance. # Run before the root of chain action is run. before 'base' => sub { my ( $self, $c ) = @_; $self->$_ for qw/ clear_item clear_item_id clear_resultset /; }; Although that depends on the chain running to clear out the previous values. So, the stash is probably safer. Of course, could still add methods of the same name $c->controller( 'CD' )->item that is a wrapper for saving to or reading from the stash, although that means $c would have to be available to the Controller. So, where should this per-request data get saved, and what do you recommend for naming? BTW -- Catalyst::Component::ACCEPT_CONTEXT says "Make the current Catalyst request context available in *Models and Views*". Any reason not to use this for Controllers? -- Bill Moseley mose...@hank.org
_______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/