Question

I have the following class in Magento 2:

namespace Vendor\MyModule\Block;

class ProductTab extends \Magento\Catalog\Block\Adminhtml\Category\Tab\Product
{
    /**
     * @var \Magento\Framework\App\Config\ScopeConfigInterface
     */
    protected $_scopeConfig;

    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Backend\Helper\Data $backendHelper
     * @param \Magento\Catalog\Model\ProductFactory $productFactory
     * @param \Magento\Framework\Registry $coreRegistry
     * @param array $data
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Backend\Helper\Data $backendHelper,
        \Magento\Catalog\Model\ProductFactory $productFactory,
        \Magento\Framework\Registry $coreRegistry,
        array $data = [],
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
    ) {
        $this->_productFactory = $productFactory;
        $this->_coreRegistry = $coreRegistry;
        $this->_scopeConfig = $scopeConfig;
        parent::__construct($context, $backendHelper, $coreRegistry, $data);
    }
}

After running rm -rf var/di && bin/magento setup:di:compile I get the following error:

Errors during compilation: Vendor\MyModule\Block\ProductTab Incompatible argument type: Required type: \Magento\Catalog\Model\ProductFactory. Actual type: \Magento\Framework\Registry; File: /var/www/magento/app/code/Vendor/MyModule/Block/ProductTab.php Total Errors Count: 1

What have I done wrong? I don't get it... I just copied the construct-function of the parent and added a 6th argument to it (the scope config).

Was it helpful?

Solution

See at this line of your constructor:

parent::__construct($context, $backendHelper, $coreRegistry, $data);

You have missed $productFactory at 3rd position.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top