On 18 Jul 2010, at 21:42, Alejandro Imass wrote:
Ok. already! ;-)  I have a big bump in my forehead from all this
headbanging. With the headache and all I think I finally
understand...I hope... In my case I need a model that creates an
object to handle every request individually so:

Yep, you got it.

Couple of slight clarifications / corrections below.

1) Create a very thin layer that will be the instance. Having: BEGIN
{extends 'Catalyst::Model'; }
2) Override ACCEPT_CONTEXT

ACCEPT_CONTEXT is optional (so you're not overriding it).

3) In this sub, create an object of type foo and return _that_ instead of $self

So my Model instance is in fact a factory.

Just so.

This way I don't have to
worry about the attributes because each controller will have it's own
copy of foo. Is this close?

Yes. In fact, if you just write an ACCEPT_CONTEXT method, then every call to $c->model('Foo') will factory a new instance for you. Which may or may not imply each controller (or event different parts of the same controller) gets a different one, depending on how you structure your controller code.

The Definitive Guide to Catalyst has an extension to the Catalyst
Cookbook, in page 255 talks about Catalyst::Model::Factory which might
be another way of doing what I want, but perhaps overkill for my
simple problem.

No, Catalyst::Model::Factory does _exactly_ and _only_ this for you, so you probably/possibly want to use that rather than writing it yourself :)

Another possibility it's well worth looking into if appropriate is Catalyst::Component::InstancePerContext, which handles all of the logic to put the instance which is generated by the factory into the stash for you, so that subsequent requests to $c->model('Foo') in the same request get back the same instance...

In some cases (if you're changing the state of this model during a request) then that's likely what you're looking for.

Cheers
t0m




_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to