yılında Şema modelleri (varsayılan şema yükleyici inşa Moose/MooseX :: nonmoose kullanan sözdizimi oluşturulur)Moose yöntemi düzenleyiciler :: herhangi bir sonuç sınıfı myschema :: Sonucu :: Foo için Catalyst
Ben şöyle bir satır için yapıcı verilerini sterilize bir BUILDARGS yöntemi sarmalayıcı eklerseniz:
doğrudan şemayı kullanan zaman çalışırpackage MySchema::Result::Foo;
use Moose;
use MooseX::NonMoose;
[etc ..]
around 'BUILDARGS' => sub {
my $orig = shift;
my $class = shift;
delete $_[0]->{not_a_real_column};
return $class->$orig(@_);
};
. - Katalizör :: Modeli ile aynı şema kullanıldığında> yeni Ancak
use MySchema;
my $s = MySchema->connect('dbi:blahblahblah');
$s->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #win
olarak adlandırılan yeni bir satır nesne real_column => 'değeri' ile oluşturulan ve not_a_real_column önce çıkarılır: beklendiği gibi, aşağıdaki işleri Örneğin :: DBIC :: Schema siparişi farklıdır. Aşağıdakiler, not_a_real_column geçersiz olduğundan yeni bir Foo satır nesnesi oluşturmaya çalışırken başarısız olur. Başka bir deyişle, yeni argümanlar önce BUILDARGS üzerinden geçmez -> yeni denir.
$c->model('MySchemaModel')->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #fails
İlginçtir ki, etrafta 'yeni' => sub {} yerine etrafına sarın eğer 'BUILDARGS' => alt {} davranışı her iki durumda da aynıdır ve gayet iyi çalışıyor, ama benim anlayış Moose dogma, asla yeni bir şeyle dalga geçmez.
Bu durumun neden böyle olduğunu anlamama yardımcı olmak veya daha iyi bir yolu var mı?