2017-01-19 10 views
1

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

Например

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

Является ли это правильный путь, или я должен использовать другой способ обращаться к этим свойствам?

ответ

1

Лучшее место было бы:

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

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

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

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

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

файл, который содержит пример данных на нем.

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']); 
    } 
}