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/

Reply via email to