表生成和ResultSet生成不是问题,我需要的是在运行时将那些新生成的ResultSet添加到Model中,以便我可以在进一步的请求中调用它们.
到目前为止,我的想法是创建一个控制DBI :: Class :: Schema的类,提供访问器方法并提供一种在运行时更新和重新加载Schema的方法.我想要一个使用Catalyst本身的不同想法.
感谢您提供的所有帮助.
解决方法 这并不完美,但它对我们有用.如果你在MyApp.pm文件中重载模型方法看起来像这样:
sub model { my ($self,$model,@rest) = @_; if (my ($rs) = $model =~ m/^DB::(.+)$/) { $self->model('DB')->schema->resultset($rs) } else { return $self->next::method($model,@rest); } }
然后在你的Schema.pm中添加这样的东西:
use List::Util 'first'; sub resultset { my ($self,$rs) = @_; unless (first { $_ eq $rs } $self->sources) { eval "require MyApp::Schema::NonDefaultResult::$rs"; $self->register_class("$rs","MyApp::Schema::NonDefaultResult::$rs"); } return $self->next::method($rs); }
要点是,现在如果你要求一个未加载的结果集,它会在运行时从一些其他命名空间加载(因为你可能还想在编译时加载许多其他结果.)
多年来我们一直在使用它来生成数百个生成的表,并且运行良好.
总结以上是内存溢出为你收集整理的Catalyst&Perl – 在运行时生成模型全部内容,希望文章能够帮你解决Catalyst&Perl – 在运行时生成模型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)