Magento2 Blocks Error – Fatal Error Call to a Member Function Dispatch While Calling Block in Magento 2

blocksmagento-2.0magento2

This is my Block File:

 <?php

 namespace ChennaiBox\Mymail\Block\Mail;

 class MailContent extends \Magento\Framework\View\Element\Template
 {
 protected $_objectManager;

 protected $customerSession;

 public function __construct(
    \Magento\Customer\Model\Session $customerSession,  
    \Magento\Framework\ObjectManagerInterface $objectManager
 ) {
    $this->customerSession = $customerSession;
    $this->_objectManager = $objectManager;
  }

 public function mymailData()
 {
try{

     if ($this->customerSession->isLoggedIn()) {
     $cutomerEmail    =(string)$this->customerSession->getCustomer()->getEmail();

     echo $cutomerEmail;

      else{
            $this->_redirect('customer/account/login/');
          }
   }catch (Exception $e) {

        $e->getMessage();

    }
   }

 }

If I call this block I get error

PHP Fatal error: Call to a member function dispatch() on null in
/var/www/html/magento2/vendor/magento/framework/View/Element/AbstractBlock.php
on line 642, referer:
http://magentodev.gworks.mobi/magento2/customer/account/index/

from apache error.log file., why, suggect me how to solve this problem.

Best Answer

The problem is that your constructor does not match the parent class constructor.

To fix that you need to update your constructor:

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Customer\Model\Session $customerSession,  
    \Magento\Framework\ObjectManagerInterface $objectManager,
    array $data = []
 ) {
    parent::__construct($context, $data);
    $this->customerSession = $customerSession;
    $this->_objectManager = $objectManager;
  }

Don't forget to flush the var/cache and var/generation after your changes.