共享配置的催化剂模型

问题描述 投票:2回答:1

我正在尝试为每种资源类型获取多个模型,以共享一个主要资源,该主要资源确实登录了Catalyst :: Model :: REST扩展类。

MyApp :: Model :: Game(麋鹿强制执行的主机名,用户名,密码的必需属性)MyApp :: Model :: Game :: AccountMyApp :: Model :: Game :: Character

:: 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'和'Model :: Game :: Character'创建另一个条目作为解决方法。

如果我打算用这种错误的方式在软件包之间共享配置,

perl model catalyst
1个回答
1
投票

看看Catalyst::Component的文档,它说:

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

这是非常有用的功能!这基本上意味着您可以从config选项中填充类中的任何属性。

在这种情况下,您可以为所有从Catalyst :: Model :: REST派生的模型创建单个基类,并在该类的属性中设置凭据。但是,这将不允许您将凭据放入外部配置文件。

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

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

不幸的是,我想通过外部配置文件实现此目标的唯一方法是复制数据,除非您将Perl文件用作您的配置,在这种情况下,您可以定义变量并在配置中重新使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.