Catalyst模型共享配置

时间:2014-04-23 00:28:17

标签: perl model catalyst

我试图为每种资源类型获取多个模型,以共享一个为Catalyst :: Model :: REST扩展类登录的主要资源。

MyApp :: Model :: Game(Moose强制执行主机名,用户名,密码所需的属性) MyApp的::型号::游戏::账户 MyApp的::型号::游戏::字符

:: Account和:: Character都扩展了MyApp :: Model :: Game,Game在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'创建另一个条目。和'模型::游戏::角色'分别作为解决方法。

如果我以错误的方式分享包之间的配置,

1 个答案:

答案 0 :(得分:1)

查看Catalyst::Component的文档,其中包含:

  

组件的配置哈希与该组件的应用程序上的任何配置条目合并,并传递给new()......

这是一个非常有用的功能!这基本上意味着您可以从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文件作为配置,在这种情况下你可以定义变量并在配置中重用它们。