这是什么?它是一种内部称为全局的方法吗?并且,如果它是一个内部调用的方法,为什么它被发送到dbh制造商或四个参数?是什么决定了它的发送方式?它被列为一种方法。什么是connect_info
这个方法通常由DBIx :: Class :: Schema中的“connection”调用, 它在传递之前将其参数列表封装在arrayref中 他们在这里。
参数列表可能包含:
相同的4元素参数集通常会传递给“连接” 在DBI中,可选地后跟可识别的额外属性 DBIx ::类别:
$connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ];
返回a的单个代码引用 连接的DBI数据库句柄可选地后跟额外的属性 由DBIx :: Class识别:
$connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ];
包含所有属性和dsn / user / password的单个hashref 混合在一起:
$connect_info_args = [{ dsn => $dsn, user => $user, password => $pass, %dbi_attributes, %extra_attributes, }]; $connect_info_args = [{ dbh_maker => sub { DBI->connect (...) }, %dbi_attributes, %extra_attributes, }];
这特别有用 对于基于Catalyst的应用程序,允许以下配置 (Config :: General style):
<Model::DB> schema_class App::DB <connect_info> dsn dbi:mysql:database=test user testuser password TestPass AutoCommit 1 </connect_info> </Model::DB>
dsn
/user
/password
组合可以用dbh_maker
键替换 其值为返回连接的DBI数据库句柄的coderef请注意,DBI文档建议您始终明确设置
AutoCommit
为0或1. DBIx :: Class进一步推荐它 设置为1,并通过我们的“txn_do”执行交易 DBIx :: Class :: Schema方法。如果不这样做,DBIx :: Class会将其设置为1 明确地将其设置为零。这是大多数DBD的默认设置。看到 “DBIx :: Class和AutoCommit”了解详情。
$connect_info_args
?
答案 0 :(得分:0)
以下是我如何使用它
你必须使用这样做的存储(你可以在文档中找到它)
package MyDBIC::Schema;
__PACKAGE__->storage_type("DBIx::Class::Storage::DBI::mysql::MySubClass")
package DBIx::Class::Storage::DBI::mysql::MySubClass;
use mro 'c3';
use base 'DBIx::Class::Storage::DBI::mysql';
sub connect_info {
my $self = shift;
my $retval = $self->next::method([{
username => _username(),
password => $password,
dsn => "my:dsn:"
})
$retval;
};
我找到了一个如何做的粗略示例burred here。谈论糟糕的文档..
connect_info
似乎已经破产。事情尝试了。connect_info
对存储进行子类化。它被调用,但它返回的任何东西都没有用。在架构上调用->connect->storage->ensure_connected;
会导致错误。connect_info
。无法包装。 The method 'connect_info' was not found in the inheritance hierarchy
。$self->connect_info()
调用BUILD
... DBIx::Class::Storage::DBI::connect_info
会被调用,但不管我交给它,sub只会获得$ self,第一个参数。__PACKAGE__->connect_info({})
或__PACKAGE__->connect_info([{}])
会导致两个参数都发送到DBIx::Class::Storage::DBI::connect_info
,但缺少$self
会导致{{1}当子尝试写入访问者时。