ScopeConfigInterface $scopeConfig
特定のオブジェクトを拡張するときに使用できない
di.xml
<preference for="Magento\Framework\Logger\Monolog" type="Foo\Log\Logger\FooLog" />
<virtualType name="helper" type="Foo\Log\Helper\Data" />
<type name="Foo\Log\Logger\FooLog">
<arguments>
<argument name="helper" xsi:type="object">Foo\Log\Helper\Data</argument>
</arguments>
</type>
FooLog.php
public function __construct(
\Foo\Log\Helper\Data $dataHelper
)
{
$this->_scopeConfig = $scopeConfig;
}
Data.php
public function __construct(ScopeConfigInterface $scopeConfig)
{
$this->_scopeConfig = $scopeConfig;
}
$this->_scopeConfig->getValue('dev/debug/foo_bar_config', 'default');
エラー:
Circular dependency: Magento\Store\Model\ResourceModel\Config\Collection\Scoped depends on Magento\Store\Model\ResourceModel\Config\Collection\Scoped and vice versa.
CreateOrder.phpのように既存の構成を取得することもできません。
$this->scopeConfig->getValue(self::CONFIG_PATH_MERCHANT_ID, $this->sessionQuote->getStoreId());
問題は、次のScopeConfigInterface $scopeConfig
ような他のオブジェクトを拡張しようとすると、特定のオブジェクトにしか使用できないことです。
<preference for="Magento\Cms\Controller\Index\Index" type="Foo\Log\Helper\Data" />
できます
*更新
プロキシクラスで試した-成功
<type name="Foo\Log\Helper\Data">
<arguments>
<argument name="configinterface" xsi:type="object">Magento\Framework\App\Config\ScopeConfigInterface\Proxy</argument>
</arguments>
</type>
Data.php
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface\Proxy $scopeConfig)
{
$this->_scopeConfig = $scopeConfig;
$host = $this->_scopeConfig->getValue('dev/debug/remote_server_host');
// error after getValue
}
}