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/