2016-04-04 55 views
0

docs for connect_info的:DBIx :: Class :: Storage :: DBI的connect_info如何工作?

connect_info

方法通常由它封裝參數列表中的數組引用傳遞 之前在DBIx ::類::模式 「連接」, 稱爲他們在這裏。

參數列表可包含:

  • 相同的4元件參數設置一個常會通過「連接」在DBI ,任選接着通過 DBIx ::類公認的額外屬性:

    $connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ]; 
    
  • 單個碼參考它返回一個 連接DBI數據庫句柄任選接着通過識別額外的屬性 DBIx ::類別:

    $connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ]; 
    
  • 單個hashref與混合在一起的所有屬性和該DSN /用戶/密碼 :

    $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, 
    }]; 
    

    這是基於催化劑的應用中特別有用 ,允許以下配置 (配置::一般風格):

    <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,並且您通過 DBIx :: Class :: Schema方法中的「txn_do」執行事務。如果您不明確地將其設置爲0,則DBIx :: Class將其設置爲1。這是大多數DBD的默認設置。有關詳細信息,請參閱 「DBIx :: Class和AutoCommit」。

這是什麼?這是一種內部調用的方法,還是一種全局方法?而且,如果這是一種內部調用的方法,爲什麼它會被髮送一個dbh製造商或四個參數?什麼決定了它發送的內容?它被列爲一種方法。什麼是$connect_info_args

+2

如果您打算轉儲整個文檔,請至少格式化它,以便它可讀?只是鏈接會比那些無法理解的混亂更好。 – ThisSuitIsBlackNot

+0

如果您從模式類繼承並且想要影響連接的建立方式,那麼它是相關的。這可能是用於調試目的,或者注入測試數據庫或類似的東西。這也很有趣,因爲它會返回連接信息,這對於測試,調試,分析以及可能在奇怪的生產環境中也很有用。我不會將此作爲答案發布,因爲我太累了,無法詳細說明。如果你只是使用DBIC,你不需要處理這個問題。 – simbabque

+0

當然,這是一種方法嗎? $ connect_info_args是我得到的,還是我回來的?該方法得到了什麼?它有兩個簽名嗎? –

回答

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;會導致錯誤。
  • 用Moose :: around()包裝connect_info。無法包裝。 The method 'connect_info' was not found in the inheritance hierarchy
  • 調用$self->connect_info()BUILD ... DBIx::Class::Storage::DBI::connect_info被調用,但無論我接觸到它,子只獲取$ self,第一個參數。
  • 調用__PACKAGE__->connect_info({})__PACKAGE__->connect_info([{}])導致兩個參數發送到DBIx::Class::Storage::DBI::connect_info但缺乏的$self結果Class::XSAccessor: invalid instance method invocant: no hash ref supplied at當次嘗試寫入存取。
+0

第二個錯誤說'contact_info',而它應該是'connect_info'。 –

相關問題