29

Fields added through the system.xml and default values populated with config.xml, how do we fetch the data in Magento2

35

Implementing in a class,

class Dummy 
{
   /**
   * @var \Magento\Framework\App\Config\ScopeConfigInterface
   */
   protected $scopeConfig;

   /**
   * Recipient email config path
   */
   const XML_PATH_EMAIL_RECIPIENT = 'contact/email/recipient_email';

   public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig)
   {
      $this->scopeConfig = $scopeConfig;
   }

   /**
   * Sample function returning config value
   **/

  public function getReceipentEmail() {
     $storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;

     return $this->scopeConfig->getValue(self::XML_PATH_EMAIL_RECIPIENT, $storeScope);


     }
}

Hope this is helpful!

  • 1
    public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig) -- there should be "\" preceding "Magento" – Reena Parekh Dec 23 '15 at 11:59
  • 1
    Just a hint: if you define methods which access config values in an helper class (extending \Magento\Framework\App\Helper\AbstractHelper) you will already have the $this->scopeConfig object without any need to inject it – Alessandro Ronchi Jun 29 '16 at 16:45
  • @AlessandroRonchi is there a list of all objects available in extended abstract helper classes somewhere? – paj Jul 20 '17 at 16:29
  • 1
    @paj as far as I know, you have to recursively look at constructor's dependencies of super classes; – Alessandro Ronchi Jul 23 '17 at 9:18
16

Create a function for getting configuration values in your custom module's helper.

public function getConfig($config_path)
{
    return $this->scopeConfig->getValue(
            $config_path,
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
            );
}

and call anywhere you want for example in test.phtml

$moduleStatus = $this->helper('Customvendorname\Custommodulename\Helper\Data')->getConfig('sectionid/groupid/fieldid');

In block and helper call like this:

 $this->_objectManager->create('Customvendorname\Custommodulename\Helper\Data')->getConfig('sectionid/groupid/fieldid');

Note: construct Object Manager on class constructor or directly use as

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$objectManager->create('Customvendorname\Custommodulename\Helper\Data')->getConfig('sectionid/groupid/fieldid');
5

you can use the following code to get the value from the core_config table

Edit:

Create an instance of ScopeConfigInterface class using object manager

   $scopeConfig = $this->_objectManager->create('Magento\Framework\App\Config\ScopeConfigInterface');

Then By using the scopeConfig object get the config value

    $configPath = $sectionId.'/'.$groupId.'/'.$fieldId;
    $value =  $scopeConfig->getValue(
        $configPath,
        \Magento\Store\Model\ScopeInterface::SCOPE_STORE
    );
  • even if it works, the use of objectManager to instantiate classes is highly discouraged. The correct approach is to use dependency injection. – Marius Oct 27 '15 at 13:14
  • i guess that decreases the chance of a rewrite. – huzefam Oct 27 '15 at 13:16
  • @Marius - why is magento using $this->_objectManager->create('Magento\Catalog\Model\Category') in magento2/app/code/Magento/Catalog/Controller/Adminhtml/Category.php – huzefam Oct 28 '15 at 10:07
  • That one didn't get refactored yet. Check this for more details magento.stackexchange.com/q/28617/146 – Marius Oct 28 '15 at 11:12
  • okie cool makes sense – huzefam Oct 29 '15 at 10:26
5

I have done like this, I have created a helper function in Data.php file

public function getConfig($config_path)
    {
        return $this->scopeConfig->getValue(
                $config_path,
                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
                );
    }

Then i have called one single line in the phtml file.

$required_loc = $this->helper('Namespace\Modulename\Helper\Data')->getConfig('sectionid/groupid/fieldid');

Not the answer you're looking for? Browse other questions tagged or ask your own question.