
juan.paredes at gmail
Jan 31, 2007, 11:27 AM
Post #14 of 22
(1543 views)
Permalink
|
On 1/31/07, Matt S Trout <dbix-class[at]trout.me.uk> wrote: > > On 31 Jan 2007, at 15:23, Juan Miguel Paredes wrote: > > > Hi, all! > > > > What if we have to overload ACCEPT_CONTEXT to do something like this, > > but using DBIC::Schema? What would be the recommended inheritance > > chain? Catalyst::Model::DBIC::Schema acts as a glue between the actual > > Catalyst model and the Schema classes, so I'm a little confused about > > where to start... In this particular case, we'd like to access $c > > from model in order to overload subroutines (trigger-like) to track, > > for example, which user modified what... > > add an accessor to the schema, and do $schema->clone then hand that > $c->user > Ok! I understand that ACCEPT_CONTEXT would have to be placed in a package along the Catalyst::Base inheritance chain, so, a feasible place would be in MyApp::Model::Schema (based on Catalyst::Model::DBIC::Schema). I've tried this: package MyApp::Model::BD; use strict; use base 'Catalyst::Model::DBIC::Schema'; __PACKAGE__->mk_accessors( 'context' ); sub ACCEPT_CONTEXT { my ($self, $c, @args) = @_; my $new = bless({ %$self }, ref $self); $new->context($c); return $new; } In fact, placing some $c->log->debug in ACCEPT_CONTEXT shows it runs ok. The question is, if this is the right place to overload ACCEPT_CONTEXT, how would I access the context from, say: package MyApp::Schema::BD::TpRol; use strict; use base qw/DBIx::Class/; #table, add_columns, etc. sub update { my $self = shift; my $c = $self->context; # wrong, no method "context", because $self is a DBIx::Class::Row my $c = MyApp::Model::BD->context; # wrong, complains that Can't use string ("MyApp::Model::BD") as a HASH ref while "strict refs" return $self->next::method( @_ ); } So, if the location for overloading ACCEPT_CONTEXT seems reasonable, accessing it from overloaded subroutines in ResultSource would be the last part of the puzzle. In this case, just as a proof of concept, I'm trying to access the whole $c, but later that could be refined with accessors for, say, just $c->user, $c->request->params, etc. Thanks again! Juan _______________________________________________ List: Catalyst[at]lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst[at]lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/
|