[Catalyst] overriding Catalyst::Model::CDBI::new()
Luke Meyer
luke at daeron.com
Thu Sep 1 06:01:35 CEST 2005
As usual, I find that the quickest way to find my own answer is to ask
the question publicly first. *sigh*
If I change SUPER to NEXT it seems to work as expected. Now NEXT is a
bit new to me, so maybe it's just that, but I'm having a hard time
grasping why the new() wouldn't work as written, considering this is a
"leaf" class with only one base class.
Luke Meyer wrote:
> I'd like to meddle with some loaded DB classes after they're loaded.
> So I figured I'd just override the new() method and add my meddling at
> the end. However, it seems Catalyst::Model::CDBI behaves badly with
> overriding. I don't quite see why yet. Try this out:
>
> $ catalyst.pl App
> $ cd App
> $ script/app_create.pl model DB CDBI
> $ cat >> lib/App/M/DB.pm
> sub new { shift()->SUPER::new(@_) } #should just propagate up
> 1;
> <EOF>
> $ vi lib/App/M/DB.pm #and add database connection info
> $ script/app_server.pl
> [...]
> [Wed Aug 31 23:24:41 2005] [catalyst] [debug] Loaded tables "Rating
> Session User UserLog sessions"
> Use of uninitialized value in pattern match (m//) at
> /Library/Perl/5.8.6/Class/DBI/Loader.pm line 75.
> Use of uninitialized value in string eq at
> /Library/Perl/5.8.6/Class/DBI/Loader.pm line 76.
> Use of uninitialized value in concatenation (.) or string at
> /Library/Perl/5.8.6/Class/DBI/Loader.pm line 77.
> [Wed Aug 31 23:24:41 2005] [catalyst] [debug] Couldn't load tables
> "Couldn't require loader class "Class::DBI::Loader::", "Can't locate
> Class/DBI/Loader/.pm in @INC (@INC contains:
> /Users/luke/code/Catalyst/App/script/../lib
> /System/Library/Perl/5.8.6/darwin-thread-multi-2level
> /System/Library/Perl/5.8.6
> /Library/Perl/5.8.6/darwin-thread-multi-2level /Library/Perl/5.8.6
> /Library/Perl /Network/Library/Perl/5.8.6/darwin-thread-multi-2level
> /Network/Library/Perl/5.8.6 /Network/Library/Perl
> /System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level
> /System/Library/Perl/Extras/5.8.6 /Library/Perl/5.8.1 .) at (eval 51)
> line 2.
> BEGIN failed--compilation aborted at (eval 51) line 2.
> " at /Library/Perl/5.8.6/Class/DBI/Loader.pm line 79.
> "
> Couldn't instantiate component "App::M::DB::SUPER", "Can't call method
> "classes" on an undefined value at
> /Library/Perl/5.8.6/Catalyst/Model/CDBI.pm line 67." at
> /Library/Perl/5.8.6/Module/Pluggable/Fast.pm line 95
> Compilation failed in require at script/app_server.pl line 13.
> BEGIN failed--compilation aborted at script/app_server.pl line 13.
>
>
> If I get rid of the overridden new() everything loads fine.
>
> Everything should be fairly up to date, just installed Catalyst a few
> days ago...
>
> Any ideas?
>
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst
More information about the Catalyst
mailing list