On 1/31/07, Matt S Trout <[EMAIL PROTECTED]> 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: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/