3

I'm trying to get store information which are set in backend like email,contact,address etc...(I've taken reference from here : https://magento.stackexchange.com/a/125359/39607 )

To do so I've created a module

Following is my block file...

Contact.php

<?php

namespace Vendor\Module\Block;

class Contact extends \Magento\Framework\View\Element\Template
{
    protected $_storeInfo;

    public function __construct(
        \Magento\Store\Model\Information $storeInfo
    )
    {        
        $this->_storeInfo = $storeInfo;
    }
    public function getPhoneNumber()
    {
        return $this->_storeInfo->getInformationObject()->getPhone();
    }

}

And in my phtml I'm calling like this :

<?php
    echo "Phone: ".$block->getPhoneNumber();
?>

But it's not working and showing me an error :

( ! ) Fatal error: Uncaught Error: Call to a member function dispatch() on null in vendor\magento\framework\View\Element\AbstractBlock.php on line 644 ( ! ) Error: Call to a member function dispatch() on null in vendor\magento\framework\View\Element\AbstractBlock.php on line 644

What can be the issue here??

Kaushal Suthar
  • 3,227
  • 5
  • 31
  • 57

3 Answers3

6

It's because your constructor does not match the parent block constructor. (the ... in my answer you linked are important).

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Store\Model\Information $storeInfo,
    array $data = []
)
{        
    $this->_storeInfo = $storeInfo;
    parent::__construct($context, $data);
}
Raphael at Digital Pianism
  • 70,385
  • 34
  • 188
  • 352
  • But after doing so I'm getting following error now

    ( ! ) Fatal error: Uncaught Error: Call to undefined method Magento\Store\Model\Information::getInformationObject() in \www\m2\app\code\Package\Module\Block\Contact.php on line 26

    – Kaushal Suthar Dec 06 '16 at 10:30
  • @KaushalSuthar there was a mistake in my original post you linked. It must be getStoreInformationObject instead of getInformationObject – Raphael at Digital Pianism Dec 06 '16 at 10:33
  • Now I'm getting error like this : Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Store\Model\Information::getStoreInformationObject() must be an instance of Magento\Store\Model\Store, none given, called in m2\app\code\Package\Module\Block\Contact.php on line 26 and defined in m2\vendor\magento\module-store\Model\Information.php on line 79 :( – Kaushal Suthar Dec 06 '16 at 11:02
  • @KaushalSuthar I get that error as well. I suppose that the context needs to be in its own class. – VectorVortec Feb 09 '18 at 12:53
3

Well, I've done in following way...But I don't it's proper way to do so or not...

    namespace Vendor\Module\Block;

class Contact extends \Magento\Framework\View\Element\Template
{
    protected $_storeInfo;
    protected $_storeManagerInterface;

    public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Store\Model\Information $storeInfo,
    array $data = []
    )
    {
        $this->_storeInfo = $storeInfo;
        parent::__construct($context, $data);
    }
    public function getPhoneNumber()
    {
        return $this->_storeInfo->getStoreInformationObject($this->_storeManager->getStore())->getPhone();
}

and in template file I've called

echo $block->getPhoneNumber();

UPDATE:

We don't need to use \Magento\Store\Model\StoreManagerInterface as it's already in parent class. We can directly use it vai $this->_storeManager

Kaushal Suthar
  • 3,227
  • 5
  • 31
  • 57
1
 public function __construct(\Magento\Framework\View\Element\Template\Context $context,  
                \Magento\Store\Model\Information $storeInfo,  
                \Magento\Store\Model\StoreManagerInterface $storeManager ,
                array $data = [] ) { 
             $this->_storeInfo = $storeInfo;
             $this->_storeManager = $storeManager;
             parent::__construct($context, $data); 
    }

Make sure you are working in developer mode and clear your generation folder by

rm -rf var/generation/*

did you tried like this?

   public function getPhoneNumber()
    {
        return $this->_storeInfo->getStoreInformationObject($this->_storeManager->getStore())->getPhone();
    }
Krishnan Daiva
  • 536
  • 6
  • 17