Я создал простой пользовательский компонент, который простирается от yii\base\Component
.
namespace app\components\managers;
use yii\base\Component;
use yii\base\InvalidConfigException;
class HubspotDataManager extends Component
{
public $hubspotApiKey;
private $apiFactory;
public function init()
{
if (empty($this->hubspotApiKey)) {
throw new InvalidConfigException('Hubspot API Key cannot be empty.');
}
parent::init();
// initialise Hubspot factory instance after configuration is applied
$this->apiFactory = $this->getHubspotApiFactoryInstance();
}
public function getHubspotApiFactoryInstance()
{
return new \SevenShores\Hubspot\Factory([
'key' => $this->hubspotApiKey,
'oauth' => false, // default
'base_url' => 'https://api.hubapi.com' // default
]);
}
}
Я зарегистрировал компонент в моей конфигурации приложения config/web.php
, где я также добавил пользовательский параметр.
'components' => [
...
'hubspotDataManager' => [
'class' => app\components\managers\HubspotDataManager::class,
'hubspotApiKey' => 'mycustomkeystringhere',
],
...
],
Однако, я обнаружил, что когда я создаю экземпляр моего компонента, вот так:
$hubspot = new HubspotDataManager();
этот hubspotApiKey
параметр конфигурации не передается в __construct($config = [])
- $config
- это просто пустой массив, поэтому в init()
конфигурация не устанавливает для свойства компонента hubspotApiKey
значение hubspotApiKey
в конфиге, поэтому, соответственно, я вижу это из своего брошенного исключения:
Неверная конфигурация - yii \ base \ InvalidConfigException
Ключ API Hubspot не может быть пустым.
Однако, если я вызову компонент следующим образом:
Yii::$app->hubspotDataManager
передает эту конфигурационную переменную в! Почему это? Какие дополнительные усилия я должен сделать, чтобы компонент загружал свои данные конфигурации приложения для стандартного создания класса? Я не могу найти ничего об этом конкретном сценарии в документации.
ПРИМЕЧАНИЕ. Использование последней версии Yii2 2.0.15.1
с использованием базового шаблона приложения.