[Catalyst] Wierd config behavior solved (was Re: Creating my own controller....)

Matt S Trout dbix-class at trout.me.uk
Fri Apr 28 20:53:01 CEST 2006

John Napiorkowski wrote:
> I spent a lot of time digging into the trouble with
> using __PACKAGE__->config with subclassed controllers.
>  The short story is that the solution from Matt (using
> "__PACKAGE__->_config({ %{ __PACKAGE__->_config }
> });") did work, although it's not so pretty since you
> need to put it in front of EVERY controller that is
> subclassing.
> Although this solution does the trick, I looked into
> this further, since I really think this solution is a
> bit undesirable.  Personally I prefer to encapsulate
> common behavior to base classes (as I am sure many of
> you do) and having that line stuck in the top of every
> controller is just going to cause me trouble sooner or
> later.  For example I am sure that myself or another
> programming will forget to do this, or not understand
> why it is there in the first place and remove it.

Yes. That's why I was guiding you towards a test case we can commit to 
Catalyst trunk and get this fixed in Catalyst::Component itself.

> The config method is inherited from
> Catalyst::Component.  It's actually not a lot of
> lines, so I'll just paste it here for our help:
> sub config {
>     my $self = shift;
>     $self->_config( {} ) unless $self->_config;
>     if (@_) {
           my $orig_config = { %{$self->_config} };
>         my $config = @_ > 1 ? {@_} : $_[0];
>         while ( my ( $key, $val ) = each %$config ) {
>             $orig_config->{$key} = $val;
>         }
>     }
>     return $self->_config;
> }

should be the fix.

> Anyway, at least I have a solution I can live with for
> now.  Hopefully my post will save someone else the
> trouble I had, and just maybe someone smarter than me
> at this (most of you I imagine :) ) will read this and
> have an 'ah ha' moment and grasp the trouble.

I already grasped the trouble. That's how I was able to give you a workaround :)

Can I have that test patch please?

      Matt S Trout       Offering custom development, consultancy and support
   Technical Director    contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +

More information about the Catalyst mailing list