cancel
Showing results for 
Search instead for 
Did you mean: 

How to call helper in overriding store model

How to call helper in overriding store model

Hi I am creating an extension which needs to override magento store model (\Magento\Store\Model\Store). For this I have used di.xml in etc folder. I'm getting error when I call my custom helper in overriding model. This is the error.
---
Recoverable Error: Argument 1 passed to Abc\Xyz\Model\Store::__construct() must be an instance of Abc\Xyz\Helper\Data, instance of Magento\Framework\Model\Context given, called in /home/zento/development/magento2/var/generation/Abc/Xyz/Model/Store/Interceptor.php on line 14 and defined in /home/zento/development/magento2/app/code/Abc/Xyz/Model/Store.php on line 14

My di.xml file in etc folder

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Store\Model\Store" type="Abc\Xyz\Model\Store" />
</config>

My overriding model

namespace Abc\Xyz\Model;
class Store extends \Magento\Store\Model\Store
{    	

	protected $_helper;
	public function __construct(\Abc\Xyz\Helper\Data $moduleHelper) {
		$this->_helper = $moduleHelper;
	}

    public function getDefaultCurrencyCode()
    {
		if ($this->_helper->isEnabled()) {
			$result = $this->getConfig(Currency::XML_PATH_CURRENCY_DEFAULT);
			return $this->getCurrencyCodeByIp($result);
		} else {
			return parent::getDefaultCurrencyCode();
		}
    }
}

and it is my helper

namespace Abc\Xyz\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
	protected $_scopeConfig;
	protected $_dir;

	public function __construct(
				\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
				\Magento\Framework\Filesystem\DirectoryList $dir,
				array $data = []
				) 
	{
		$this->_scopeConfig = $scopeConfig;
		$this->_dir = $dir;
	}

	public function isEnabled()
    { 		
	return $this->_scopeConfig->getValue('xxx/xxx/enable_disable', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
    }
}

I need help to resolve this isue, I want to call my helper functions in my overriding store model class.

I am very thankful for any assistance.

3 REPLIES 3

Re: How to call helper in overriding store model

I recommend not override the standard classes at all, because it will break other extensions which override the same classes or which depend on a standard class impementation.

Use plugins instead: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html

Re: How to call helper in overriding store model

Hi,

 

   I could not understand what you have suggested because I am already making a separate extension which is being used to override the core store model.
Do you suggest that I should not mention in di.xml file that I am overriding a store model & I should not extend my custom model from \Magento\Store\Model\Store

 Would you please explain little bit how I should manage that MAGENTO call my custom module function getDefaultCurrencyCode

instead to its core function.

 


Thanks for you help

Re: How to call helper in overriding store model

Your method will have one of the names:

beforeGetDefaultCurrencyCode
afterGetDefaultCurrencyCode
aroundGetDefaultCurrencyCode

See the documentation about "before-", "after-", and "around-" plugins: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html