In Magento 2, configuration data is stored to core_config_data database table. The easiest way to get a configuration value from there, is using the following code snippet.
$value = \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Framework\App\Config\ScopeConfigInterface::class)
->getValue(
'sections/group/field',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
);
It’s the most closest alternative to construction, which we had used in Magento 1: Mage::getStoreConfig(‘section/group/field’).
However, it’s not the best way. According to Magento 2 documentation to use objectmanager is not recommend. You can still use it in a temporary code or while you’re debugging something, but if you want to do it right, you should use dependency injection method.
A way to get a configuration value without objectmanager
To avoid an objectmanager, in Magento 2 we’re using dependency injection. Using this pattern, ScopeConfigInterface object is included via class constructor. Here is the simple example, how to get config value using dependency injection method
public $scopeConfig;
public function __construct(
. . .
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
. . .
) {
. . .
$this->scopeConfig = $scopeConfig;
. . .
}
and then to get a config value
public function mySomethingSomething()
{
. . .
$valueFromConfig = $this->scopeConfig->getValue(
'section/group/field',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
);
. . .
}
Getting a config value by store id
As you probably noticed, Magento is multi store platform and in some cases you might want to get a value from configuration according to store. The method, which we used in the examples above getValue, by default returns global configuration values. To change that, we need to pass our store id
public function mySomethingSomething()
{
. . .
$valueFromConfig = $this->scopeConfig->getValue(
'sections/group/field',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,,
$storeId,
);
. . .
}
Troubleshooting
No changes in frontend
If you have added the objectmanager code snippet in .phtml template file and can’t see any difference in fronted, probably it because of cache. Try to clear it.
Conclusion
In case, it isn’t a temporary code – use dependency injection. It’s not a rocket science!
That’s all for this post, folks. Let me know in the comments below, if you have some questions, or had some problems using the code snippets. I will be more than happy to append this post with your case.
Happy coding!