2014-04-23 150 views
2

我試圖讓每個資源類型的多個模型共享一個主要資源,它爲Catalyst :: Model :: REST擴展類登錄。Catalyst模型共享配置

MyApp的::型號::遊戲(穆斯強制的主機名,用戶名,密碼需要的屬性) MyApp的::型號::遊戲::帳戶 MyApp的::型號::遊戲::性格

的::帳戶和::性格都擴展MyApp的::型號::遊戲,遊戲已經是在MyApp的/ lib目錄/ MyApp.pm定義自己的包配置:

__PACKAGE__->config(
    name => 'PowerGame', 
    'Model::Game' => { 
     hostname => "Somehostname.com", 
     username => "username", 
     password => "Hax0rs", 
    } 
} 

我無法找到允許文檔Model :: Game :: Account和Model :: Game :: Character與Model :: Game使用相同的應用程序配置,因爲我有必需的屬性,應用程序失敗開始聲稱我沒有分配所需的屬性。

我目前正在爲'Model :: Game :: Account'和'Model :: Game :: Character'分別創建另一個條目作爲解決方法。

如果我要對這個錯誤的方式來共享包之間CONFIGS,

回答

1

看看該文檔的Catalyst::Component,它說:

該組件的配置哈希合併與任何配置條目在這個組件的應用程序,並傳遞給新的()...

這是一個相當有用的功能!這基本上意味着您可以從config選項填充類中的任何屬性。

在這種情況下,您可以爲從Catalyst :: Model :: REST派生的所有模型創建一個基類,並在該類的屬性中設置證書。但是,這不會允許您將憑據放入外部配置文件。

MyApp::ModelBase::REST; 
use Moose; 
extends 'Catalyst::Model::REST'; 
has '+username' => (default => 'username'); 

MyApp::Model::Game; 
use Moose; 
extends 'MyApp::ModelBase::REST'; 

我能想到的與外部配置文件實現這一目標的唯一途徑是不幸的是複製的數據,除非你使用Perl文件作爲你的配置,在這種情況下,你可以定義變量,並重新使用它們裏面的配置。