使用 Rose::DB 时出现错误。
#MyApp/DB.pm
package MyIMDB::DB;
use strict; use warnings;
use base qw(Rose::DB);
__PACKAGE__->use_private_registry;
__PACKAGE__->register_db (
driver => 'SQLite',
....
);
1;
# MyApp/DB/Object.pm
package MyApp::DB::Object;
use strict; use warnings;
use MyApp::DB;
use base qw(Rose::DB::Object);
sub init_db { MyIMDB::DB->new }
1;
#
package MyApp::Users; #controller
use strict; use warnings;
use base 'Mojolicious::Controller';
use Mojo::ByteStream 'b';
use MyApp::Models::User;
use Data::Dumper;
sub my_action {
my $uc = shift;
my $err = MyApp::Models::User::->validate(...); #extra ::
# http://perldoc.perl.org/perlobj.html#Invoking-Class-Methods
}
# MyApp/Models/User.pm # 2 packages in this file
package MyApp::Models::User::Manager;
use base qw(Rose::DB::Object::Manager);
use MyApp::Models::User;
sub object_class { 'MyApp::Models::User'}
__PACKAGE__->make_manager_methods('users');
# class methods get_x, get_x_iterator, get_x_count, delete_x, update_x
1;
MyApp::Models::User
use strict; use warnings;
use base qw(MyApp::DB::Object);
__PACKAGE__->meta->setup(
#setup tables, columns....
);
sub validate {
my $u = shift;
my $n = MyApp::Models::User::Manager::->get_users_count(query => [user_name => $user]);
}
1;
我得到的错误是:
"Can't use string ("MyApp::Models::User") as a HASH ref while "strict refs"
in use at /usr/local/share/perl/5.18.2/Rose/DB/Object.pm line 91, <DATA> line 2231."
入口点是类的my_action()
方法MyApp:Users
。
我尝试了创建类的替代设置MyApp::Models::User::Manager
:单独的 .pm 文件,make_manager_class()
但无济于事。
(我从 2007 年发现这个讨论带有相同的错误消息,但它并没有帮助我 http://comments.gmane.org/gmane.comp.lang.perl.modules.dbi.rose-db-object/1537) .
这可能表明我正在尝试调用一个对象方法,就好像它是一个类方法一样。我尝试了这里列出的技巧http://perldoc.perl.org/perlobj.html#Invoking-Class-Methods,但没有成功。
我现在可以用 来检查变量的内容Data::Dumper
,但我不知道要转储什么,因为使用的数据结构很少。