Dermot wrote:
use parent 'Catalyst::Model::Factory';
use Moose;
use namespace::autoclean;

Ewww. Use Moose, or don't - don't use both parent.pm and Moose..


__PACKAGE__->config(
        class       => 'MyApp::Local::Class',
        args        => { arg    =>  $self->arg};     # Global symbol
"$self" requires...
        );


sub ACCEPT_CONTEXT {
    my ($self, $c) = @_;
    my $new = $self->meta->clone_object($self, arg => $c->uri_with('') );
    $new = $self->meta->clone_object($self, arg => $c->req->path  );
    return $new;
}

If you're implementing your own ACCEPT_CONTEXT method, you're overriding the one provided by Catalyst::Model::Factory - so there is no point in it being there at all..

Also, why are you cloning the model object you already have? Shouldn't you be acting as a factory for an external class?

What I _think_ you want is something more like this:

package MyApp::Model::Foo;
use Moose;
use Foo; # Your 'real' model class..
use namespace::clean -except => 'meta';

extends 'Catalyst::Model';
with qw
    Catalyst::Component::InstancePerContext
    Catalyst::Component::ContextClosure
/;

has arg1 => ( is => 'ro', required => 1 );
has arg2 => ( is => 'ro', required => 1 );

sub build_per_context_instance {
    my ($self, $ctx) = @_;
    Foo->new(
        arg1 => $self->arg1,
        arg2 => $self->arg2,
        uri_gen => $self->make_context_closure(sub {
            my ($ctx, @args) = @_;
            $ctx->uri_with(@args);
        }, $ctx),
    );
}

__PACKAGE__->meta->make_immutable;

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

Reply via email to