[Catalyst] Creating my own controller and another question

John Napiorkowski jjn1056 at yahoo.com
Fri Apr 28 15:29:31 CEST 2006


I'm creating a class that subclasses from
Catalyst::Controller for use to encapsulate some
functionality for certain pages on my site.  I realize
that this could be potentially done with with a
plugin, but for this purpose I feel subclassing
Catalyst::Controller is the cleanest and most
maintainable approach.

The problem I am having is that I want my controller
to prepare some data when it is first loaded.  The
function is to create a list of objects that will
later be retrieved, so I can't just put it into the
config.  However I can't figure out the best why (or
the best practices way) to do that.  Should I just
write my own new subroutine to do this?

I've seen that I could use a sub begin: Private for
this but that get's called each time the action is
invoked and I'd like to avoid that overhead.  That's
what I am currently doing until I find out about a
better solution.

Another problem.  There is some strange things going
on when I have a config in a base controller.  For
example I have a class "element" that inherits from
"Catalyst::Controller" which has the following line
(again this is contrived a bit for clarity):

package element;

use strict;
use warnings;

use base qw/Catalyst::Controller/;

__PACKAGE__->config( view => 'element');

sub view
  $self = shift;
  return $self->{view};

Then I have two classes that inherit from this element

package page;

use base qw/element/;

__PACKAGE__->config( view => 'page');


package portlet;

use base qw/element/;

__PACKAGE__->config( view => 'portlet');

So all three classes have a method called "view". 
However this method doesn't do what I would think it
would.  If I subclass any of these three classes for a
catalyst controller and call $self->view on that
subclass I always get 'portlet' as a response, instead
of what was defined in the config for the local class.
 Maybe I just don't understand how this is supposed to

Oh, one last quick thing: Is there an easy way to get
the context object if you only have the self object,
like in a controller where you have make some local
accessors?  This is causing me a lot of trouble.
Any thoughts or questions from the community would be

--john napiorkowski

Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 

More information about the Catalyst mailing list