2017-02-27 65 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(),因爲您聲明爲關鍵字。

我認爲開發人員做得很好,使插件看起來非常乾淨!