2017-02-27 66 views
1

我想为Dancer2创建一个插件,并在config.yml文件中设置选项。 我config.yml文件看起来像这样:Dancer2 ::创建插件

plugins: 
     Test: 
     foo: 1 
     bar: 2 
     baz: 3 

我试图通过plugin_setting()来读取这些值,但没有成功。在该行中:

my $settings = plugin_setting(); 

$ settings没有值。我希望得到FOO:1,巴:2,巴兹:3

我的代码如下:

package Dancer2::Plugin::Test; 

use Dancer2::Plugin; 
use Data::Dumper; 

our $VERSION = 0.01; 

my $settings = plugin_setting(); 

register foo => sub { 
    return my $settings = _get_settings(); 
}; 

register_plugin for_versions => [ 2 ] ; 

sub _get_settings { 
    my $args = {}; 
    for (qw/foo bar baz/) { 
     if (exists $settings->{$_}) { 
     open A, q[>], 'settings.txt'; 
      $args->{$_} = $settings->{$_}; 
     } 
    } 
    print A Dumper $args;close A; 
    return $args; 
} 
1; 

任何人都可以帮助我吗?

回答

2

舞者对他们的插件做了彻底的改革,请看他们的Dancer2::Plugin documentation

在这里,我告诉你一个简单的例子:

package Dancer2::Plugin::Test; 

use strict; 
use warnings; 

use Dancer2::Plugin; 

has dictionary => (
    is    => 'ro', 
    from_config => 'dict', 
    plugin_keyword => 'foo', 
); 

1; 

和内部config.yml

plugins: 
    Test: 
     dict: 
      foo: 1 
      bar: 2 
      baz: 3 

这样,您就可以使用“插件的顶级”配置,其中我会假设你'知道'钥匙;一个你不知道什么键的配置将会有点难以解析。在那个顶层,我创建了一个字典键dict,它反过来可以保存键值对的未知列表。

在您的插件中,您可以使用$plugin->dictionary来访问(内部)散列。

在舞者路线中,您可以简单地使用foo(),因为您声明为关键字。

我认为开发人员做得很好,使插件看起来非常干净!