1

我想我做对了,因为我可以通过开发模式否决文件,但请确保我问。为我通过 composer 安装的服务存储 API 密钥的正确位置是什么?现在我将密钥存储在 local.php 内的 autoload 目录中,并通过服务定位器接收它们。

例如

$config  = $this->serviceLocator->get('Config'); 
var_dump($config['service_name_api']); // Returns api key

这是正确的方式还是我应该使用其他方式来访问这些属性?

4

2 回答 2

1

这看起来就像我会做的那样,尽管您需要提供一个默认值(在您的模块配置中),这在 api 键上下文中是不可能的,或者在您的工厂中抛出一个适当的异常,因为您不想undefined index service_name_api几个月后有一个:)

有些人还喜欢有一个配置对象,并且有一个专门用于这个对象的工厂(它有助于管理默认值而不是崩溃)。我个人倾向于觉得它有点太多了,除非你的钥匙在很多地方被重复使用,在这种情况下你会重复工厂测试。

因此,不要将以下内容添加到每个使用它的工厂

if (!isset($config['service_name_api']) || !is_string($config['service_name_api'])) {
    throw new \Exception('No "service_name_api" found in the configuration');
}

你可以有一个简单的对象

final class ServiceNameApiOption
{
    private $key;

    public function __construct(string $apiKey)
    {
        $this->key = $apiKey;
    }

    public function getKey() : string
    {
        return $this->key;
    }
}

然后是一个工厂:

final class ServiceNameApiOptionFactory
{
    public function __invoke(ContainerInterface $container)
    {
         $config  = $container->get('Config');
         if (!isset($config['service_name_api']) || !is_string($config['service_name_api'])) {
             throw new \Exception('No "service_name_api" found in the configuration');
         }
         return new ServiceNameApiOption($config['service_name_api']);
    }
}
于 2017-01-25T09:17:14.330 回答
1

最好的地方是:

config/autoload/{config file name you want}.local.php

我建议结构:

[
    'keystore' => [
        'api' => [
            // keys array
        ]
    ]
]

重复我建议上面的结构,您可以创建自己的结构,但无论如何添加

config/autoload/{config file name you want}.local.php.dist

包含示例数据的文件。

于 2017-03-18T17:01:35.803 回答