That's a "feature" in NEXT.pm.

If your class hierarchy including the base class (the *real* base class, in this case Class::Accessor) don't properly use NEXT.pm, then you don't get the benefit of re-dispatch for multiple paths.

So you do need to be careful when you want multiple inheritance in your controllers... However, in your particular case you should be able to get away by just putting FormBuilder before BindLex as BindLex doesn't require any special initialization in new().

Of course, if you *really* wanted to, you could modify the behavior of NEXT.pm for the duration of your application...

  sub NEXT::ELSEWHERE::ancestors {
      my @inlist = shift;
      my @outlist = @inlist;
      my @parents = @inlist;

      while (my $parent = shift @parents) {
          no strict 'refs';
          my @isa = @{"${parent}::ISA"};
          if (@isa) {
              push @outlist, @isa;
              push @parents, @isa;
          }
      }
      return @outlist;
  }

This will force NEXT.pm to look at immediate parents first, but will change NEXT.pm semantics, so if anything really relies on its awkward behavior (to me anyway) this change may break things.

Use at your own risk ;)

--d

Tomohiro Teranishi wrote:
Hi,

I was looking at source code for C::C::FormBuilder to know how to
write Controller extention module. Then I thought using new() method
is nice idea to run only once.

But I realize when I want to use two controller extention modules same
time, it may cause problem because of NEXT specification.

e.x.

Let's say , I want to use C::C::FormBuilder and C::C::BindLex same time.

# Below case is OK
use base qw/Catalyst::Controller::FormBuilder Catalyst::Controller::BindLex/;

# In this case,  C::C::FormBuilder->new will not called.
use base qw/Catalyst::Controller::BindLex Catalyst::Controller::FormBuilder/;

I think only first base module run NEXT but not the others.

Am I doing something wrong??
or should not use new() ??
or should not use multiple controllers??

thanks,

Tomohiro Teranishi

_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/



_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to