Hatena::Groupcatalyst

masaki@catalyst RSSフィード

Fork me on GitHub
 | 

2007-09-27

密結合なのは承知の上で DBIC な Model の中でどうしても context を使いたい

| 00:29 | 密結合なのは承知の上で DBIC な Model の中でどうしても context を使いたい - masaki@catalyst を含むブックマーク はてなブックマーク - 密結合なのは承知の上で DBIC な Model の中でどうしても context を使いたい - masaki@catalyst 密結合なのは承知の上で DBIC な Model の中でどうしても context を使いたい - masaki@catalyst のブックマークコメント

いつだったか Catalyst-ML で上記の質問に対して MST 本人が紹介してた技.

package MyApp::Schema;

use strict;
use warnings;
use base qw( DBIx::Class::Schema DBIx::Class::AccessorGroup ); # for context

__PACKAGE__->mk_group_accessors( simple => 'context' );
__PACKAGE__->load_classes;

1;
package MyApp::Model::DBIC;

use strict;
use warnings;
use base 'Catalyst::Model::DBIC::Schema';

sub ACCEPT_CONTEXT {
    my ($self, $c) = @_;

    $self = bless { %$self } => ref $self;
    $self->schema->context($c);

    return $self;
}

1;

やってることはこれだけ.

  • SchemaDBIC::AccessorGroup の mk_group_accessors を使って context アクセサを作っておく.
  • Model で ACCEPT_CONTEXT をオーバーライドして context を設定しておく.

Model 独自のヘルパメソッドに URI 使いたいときなんかに使えるだろうか.

package MyApp::Schema::User;

__PACKAGE__->add_columns(qw( id name ));

sub home_uri {
    my $self = shift;
    return $self->result_source->schema->context->uri_for('/user', $self->name);
}

おまけ.context にたどり着くまで深いのでショートカット

sub context {
    my $self = shift;
    return $self->result_source->schema->context;
}

NourNour2012/07/21 17:43Shoot, who would have tohguht that it was that easy?

xuwpcbpbxuwpcbpb2012/07/23 08:14AhZCvv , [url=http://hjqleznbifeq.com/]hjqleznbifeq[/url], [link=http://iklhcfqmqkzx.com/]iklhcfqmqkzx[/link], http://ruuccwhvacfj.com/

eksjtlpzeksjtlpz2012/07/24 00:349OMy4B <a href="http://iatqjiycarml.com/">iatqjiycarml</a>

qksmnavyqksmnavy2012/07/24 05:21ETS6J4 , [url=http://rtrgemckjlrj.com/]rtrgemckjlrj[/url], [link=http://fxatwwqvwpye.com/]fxatwwqvwpye[/link], http://qhpwmxrlybom.com/

トラックバック - http://catalyst.g.hatena.ne.jp/ikasam_a/20070927
 |