ZF3 放置 api 键的正确位置
ZF3 correct place to put your api keys
我想我做对了,因为我可以通过开发模式否决文件,但要确定我问了。我通过 composer 安装的服务的 API 密钥的正确存储位置是什么?现在,我将密钥存储在 local.php 内的自动加载目录中,并通过服务定位器接收它们。
例如
$config = $this->serviceLocator->get('Config');
var_dump($config['service_name_api']); // Returns api key
这是正确的方法还是我应该使用其他方法来访问这些属性?
这看起来像我会做的,虽然你需要提供一个默认值(在你的模块配置中),这在 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']);
}
}
最好的地方是:
config/autoload/{config file name you want}.local.php
我建议结构:
[
'keystore' => [
'api' => [
// keys array
]
]
]
重复我上面建议的结构,您可以创建自己的结构,但无论如何添加
config/autoload/{config file name you want}.local.php.dist
包含示例数据的文件。
我想我做对了,因为我可以通过开发模式否决文件,但要确定我问了。我通过 composer 安装的服务的 API 密钥的正确存储位置是什么?现在,我将密钥存储在 local.php 内的自动加载目录中,并通过服务定位器接收它们。
例如
$config = $this->serviceLocator->get('Config');
var_dump($config['service_name_api']); // Returns api key
这是正确的方法还是我应该使用其他方法来访问这些属性?
这看起来像我会做的,虽然你需要提供一个默认值(在你的模块配置中),这在 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']);
}
}
最好的地方是:
config/autoload/{config file name you want}.local.php
我建议结构:
[
'keystore' => [
'api' => [
// keys array
]
]
]
重复我上面建议的结构,您可以创建自己的结构,但无论如何添加
config/autoload/{config file name you want}.local.php.dist
包含示例数据的文件。