[Catalyst] Init Question and Not Loading a Model Question

Tomas Doran bobtfish at bobtfish.net
Fri Apr 3 11:56:02 GMT 2009


Dylan Martin wrote:
> I have two questions:  1st, where is a good place to mess with a Cat
> instance after its instantiated its components but not during
> requests?  

setup_finalize is the 'approved' hook to run stuff after all the plugins 
and components are setup, but before requests start. You need to be a 
plugin to do this obviously, and I'd recommend looking at other ways of 
doing what you want if possible, its not often you actually need to be a 
plugin.

2nd, is there a way to make Cat NOT load a model that's in
> lib/MyApp/Model?
> 
> I want to pass the log object in $c->log to an Authen::Simple object
> that I'm using for authentication.  

Right, so this is in:
http://cpansearch.perl.org/src/JLMARTIN/Catalyst-Authentication-Credential-Authen-Simple-0.03/lib/Catalyst/Authentication/Credential/Authen/Simple.pm

You have $app right there, and it could just be passed:

https://rt.cpan.org/Ticket/Display.html?id=44778

Has no tests currently, but I'm sure you can fix that, right? :)

> I could have my Login controller
> check that that authentication object has the log object, but it seems
> silly to do that during every request.  Maybe I should override setup
> in MyApp.pm?  No, that wouldn't work because the components aren't
> instantiated yet... Hmm...

With that patch, unfortunately the requirement will be that you setup 
__PACKAGE__->log( My::New::Logger ) (if you need to) before the call to 
setup.

> I have a model class in lib/MyApp/Model.  I'm running my app on two
> servers.  I only want to load my model class on one of my servers.  I
> can delete the config settings from MyApp.conf, but it still loads,
> just without my settings.  Is there a way to make it not load?  Or do
> I have to actually rip the .pm file out of lib/MyApp/Model on the server
> where I don't want it to load?

Pull your model out into an external module, then use 
Catalyst::Model::Adaptor to load it.

You can then load a different module (which is blank and contains no 
functionality) instead, from config.

But to answer your actual question, no - catalyst will load everything 
in your application namespace, there is no way to be flexible.

Cheers
t0m




More information about the Catalyst mailing list