ZF3 правильное место для размещения ваших ключей API

Я думаю, я делаю это правильно, потому что я могу отменить файл в режиме разработки, но, чтобы быть уверенным, я спрашиваю. Где правильно хранить ключи API для сервисов, которые я установил через composer. Пока я храню ключи в каталоге автозагрузки внутри local.php и получаю их через сервис-локатор.

Например

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

Это правильный путь или мне следует использовать другой способ доступа к этим свойствам?


person directory    schedule 19.01.2017    source источник


Ответы (2)


Лучшим местом будет:

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

Предлагаю структуру:

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

Повторите, я предлагаю структуру выше, вы можете создать свою собственную структуру, но в любом случае добавьте

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

файл с примерными данными.

person Javlonbek    schedule 18.03.2017

Это похоже на то, что я бы сделал, хотя вам нужно будет либо указать значение по умолчанию (в конфигурации вашего модуля), что невозможно в контексте ключей 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']);
    }
}
person Thomas Dutrion    schedule 25.01.2017