2014-04-23 3 views
2

J'essaie d'obtenir plusieurs modèles pour chaque type de ressource pour partager une ressource principale qui se connecte pour une classe étendue Catalyst :: Model :: REST.Catalyst Models partageant Configs

MyApp :: Model :: Jeu (Moose attributs requis de appliquées nom d'hôte, nom d'utilisateur, mot de passe) MyApp :: Model :: Jeu :: compte MyApp :: Model :: Jeu :: Caractère

Le :: :: compte et caractère à la fois étendre MyApp :: Model :: Puzzle Game a sa propre configuration de package défini dans le MyApp/lib/MyApp.pm:

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

Je ne parviens pas à trouver de la documentation sur l'autorisation le Model :: Game :: Account et Model :: Game :: Character pour utiliser la même configuration d'application que Model :: Game, puisque j'ai les attributs requis, l'application échoue pour commencer à réclamer je n'ai pas assigné d'attributs obligatoires.

Je crée actuellement une autre entrée pour 'Model :: Game :: Account' et 'Model :: Game :: Character' respectivement comme solution de contournement.

Si je vais sur ce la mauvaise façon de partager configs entre paquets,

Répondre

1

Jetez un oeil à la documentation pour Catalyst::Component, qui dit:

hachage de configuration du composant est fusionné avec tout entrée de configuration sur l'application pour ce composant et passé à new() ...

Ce qui est une fonctionnalité très utile! Cela signifie essentiellement que vous pouvez remplir n'importe quel attribut de la classe à partir de l'option de configuration.

Dans ce cas, vous pouvez créer une classe de base unique pour tous vos modèles qui dérive de Catalyst :: Model :: REST et définir les informations d'identification dans les attributs de cette classe. Cependant, cela ne vous permettra pas de mettre des informations d'identification dans un fichier de configuration externe.

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

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

La seule façon que je peux penser à y parvenir avec le fichier de configuration externe est malheureusement dupliquer les données, sauf si vous utilisez le fichier Perl en tant que votre config, dans ce cas, vous pouvez définir des variables et les réutiliser à l'intérieur du config.