使用 Dancer 在何处存储全局可访问的变量

Where to store globally accessible variables using Dancer

我想将变量存储在一个配置文件中,这样我就可以将它们设置在一个地方并在需要时访问它们。

在 Dancer 应用程序中放置此类变量的位置在哪里,我如何访问它们?

最好的方法是拥有一个具有默认全局设置的 config.yml 文件,如下所示:

# appdir/config.yml
logger: 'file'
layout: 'main'

您的问题:如何访问?

答案:Dancer 应用程序可以使用 'config' 关键字轻松访问其配置文件中的设置,例如:

get '/appname' => sub {
    return "This is " . config->{appname};
};

这使得将您的应用程序的所有设置集中在一个地方变得简单和容易 - 您不必担心自己实施所有这些。

您可能希望从您的网络应用程序外部访问您的网络应用程序的配置。使用 Dancer,您可以使用 config.yml 中的值和一些额外的默认值:

 # bin/script1.pl
    use Dancer ':script';
    print "template:".config->{template}."\n"; #simple
    print "log:".config->{log}."\n"; #undef

请注意,config->{log} 应该会在默认脚手架上导致 undef 错误,因为您没有加载环境,并且默认脚手架日志是在环境中定义的,而不是在 config.yml 中定义的。因此 undef.

如果你想加载一个环境,你需要告诉 Dancer 在哪里寻找它。一种方法是告诉 Dancer Web 应用程序所在的位置。 Dancer 从那里扣除 config.yml 文件所在的位置(通常是 $webapp/config.yml)。

# bin/script2.pl
    use FindBin;
    use Cwd qw/realpath/;
    use Dancer ':script';

    #tell the Dancer where the app lives
    my $appdir=realpath( "$FindBin::Bin/..");

    Dancer::Config::setting('appdir',$appdir);
    Dancer::Config::load();

    #getter
    print "environment:".config->{environment}."\n"; #development
    print "log:".config->{log}."\n"; #value from development environment

默认情况下 Dancer 加载开发环境(通常为 $webapp/environment/development.yml)。如果你想加载默认环境以外的环境,试试这个:

    # bin/script2.pl
    use Dancer ':script';

    #tell the Dancer where the app lives
    Dancer::Config::setting('appdir','/path/to/app/dir');

    #which environment to load
    config->{environment}='production';

    Dancer::Config::load();

    #getter
    print "log:".config->{log}."\n"; #has value from production environment