Magento 2, extending sales module's Model, getting error Required type: \Magento\Framework\ObjectManagerInterface
-
07-10-2020 - |
Question
I'm trying to override \Magento\Sales\Model\AdminOrder\Create
, during the compilation I'm getting below, but I'm not making any changes, simply extending it!
Incompatible argument type: Required type: \Magento\Framework\ObjectManagerInterface. Actual type: array; File:
/app/code/MyVendor/MyModule/Model/AdminOrder/Create.php
and here is my file:
<?php
// @codingStandardsIgnoreFile
namespace MyVendor\MyModule\Model\AdminOrder;
use Magento\Customer\Api\AddressMetadataInterface;
use Magento\Customer\Model\Metadata\Form as CustomerForm;
use Magento\Quote\Model\Quote\Item;
/**
* Order create model
* @SuppressWarnings(PHPMD.TooManyFields)
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Create extends \Magento\Sales\Model\AdminOrder\Create
{
/**
* Xml default email domain path
*/
const XML_PATH_DEFAULT_EMAIL_DOMAIN = 'customer/create_account/email_domain';
/**
* Quote session object
*
* @var \Magento\Backend\Model\Session\Quote
*/
protected $_session;
/**
* Quote customer wishlist model object
*
* @var \Magento\Wishlist\Model\Wishlist
*/
protected $_wishlist;
/**
* Sales Quote instance
*
* @var \Magento\Quote\Model\Quote
*/
protected $_cart;
/**
* Catalog Compare List instance
*
* @var \Magento\Catalog\Model\Product\Compare\ListCompare
*/
protected $_compareList;
/**
* Re-collect quote flag
*
* @var boolean
*/
protected $_needCollect;
/**
* Re-collect cart flag
*
* @var boolean
*/
protected $_needCollectCart = false;
/**
* Collect (import) data and validate it flag
*
* @var boolean
*/
protected $_isValidate = false;
/**
* Array of validate errors
*
* @var array
*/
protected $_errors = [];
/**
* Quote associated with the model
*
* @var \Magento\Quote\Model\Quote
*/
protected $_quote;
/**
* Core registry
*
* @var \Magento\Framework\Registry
*/
protected $_coreRegistry = null;
/**
* @var \Psr\Log\LoggerInterface
*/
protected $_logger;
/**
* Core event manager proxy
*
* @var \Magento\Framework\Event\ManagerInterface
*/
protected $_eventManager = null;
/**
* @var \Magento\Sales\Model\Config
*/
protected $_salesConfig;
/**
* @var \Magento\Framework\ObjectManagerInterface
*/
protected $_objectManager;
/**
* @var \Magento\Framework\DataObject\Copy
*/
protected $_objectCopyService;
/**
* @var \Magento\Framework\Message\ManagerInterface
*/
protected $messageManager;
/**
* @var \Magento\Sales\Model\AdminOrder\Product\Quote\Initializer
*/
protected $quoteInitializer;
/**
* @var \Magento\Customer\Api\CustomerRepositoryInterface
*/
protected $customerRepository;
/**
* @var \Magento\Customer\Api\AddressRepositoryInterface
*/
protected $addressRepository;
/**
* @var \Magento\Customer\Api\Data\AddressInterfaceFactory
*/
protected $addressFactory;
/**
* @var \Magento\Customer\Model\Metadata\FormFactory
*/
protected $_metadataFormFactory;
/**
* @var \Magento\Customer\Api\GroupRepositoryInterface
*/
protected $groupRepository;
/**
* @var \Magento\Framework\App\Config\ScopeConfigInterface
*/
protected $_scopeConfig;
/**
* @var \Magento\CatalogInventory\Api\StockRegistryInterface
*/
protected $stockRegistry;
/**
* @var \Magento\Sales\Model\AdminOrder\EmailSender
*/
protected $emailSender;
/**
* @var \Magento\Quote\Model\Quote\Item\Updater
*/
protected $quoteItemUpdater;
/**
* @var \Magento\Framework\DataObject\Factory
*/
protected $objectFactory;
/**
* @var \Magento\Customer\Api\AccountManagementInterface
*/
protected $accountManagement;
/**
* @var \Magento\Customer\Api\Data\CustomerInterfaceFactory
*/
protected $customerFactory;
/**
* Constructor
*
* @var \Magento\Customer\Model\Customer\Mapper
*/
protected $customerMapper;
/**
* @var \Magento\Quote\Api\CartRepositoryInterface
*/
protected $quoteRepository;
/**
* @var \Magento\Quote\Api\CartManagementInterface
*/
protected $quoteManagement;
/**
* @var \Magento\Framework\Api\DataObjectHelper
*/
protected $dataObjectHelper;
/**
* @var \Magento\Sales\Api\OrderManagementInterface
*/
protected $orderManagement;
/**
* @var \Magento\Quote\Model\QuoteFactory
*/
protected $quoteFactory;
/**
* @param \Magento\Framework\ObjectManagerInterface $objectManager
* @param \Magento\Framework\Event\ManagerInterface $eventManager
* @param \Magento\Framework\Registry $coreRegistry
* @param \Magento\Sales\Model\Config $salesConfig
* @param \Magento\Backend\Model\Session\Quote $quoteSession
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Framework\DataObject\Copy $objectCopyService
* @param \Magento\Framework\Message\ManagerInterface $messageManager
* @param \Magento\Sales\Model\AdminOrder\Product\Quote\Initializer $quoteInitializer
* @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
* @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
* @param \Magento\Customer\Api\Data\AddressInterfaceFactory $addressFactory
* @param \Magento\Customer\Model\Metadata\FormFactory $metadataFormFactory
* @param \Magento\Customer\Api\GroupRepositoryInterface $groupRepository
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param EmailSender $emailSender
* @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
* @param Item\Updater $quoteItemUpdater
* @param \Magento\Framework\DataObject\Factory $objectFactory
* @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
* @param \Magento\Customer\Api\AccountManagementInterface $accountManagement
* @param \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory
* @param \Magento\Customer\Model\Customer\Mapper $customerMapper
* @param \Magento\Quote\Api\CartManagementInterface $quoteManagement
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
* @param \Magento\Sales\Api\OrderManagementInterface $orderManagement
* @param \Magento\Quote\Model\QuoteFactory $quoteFactory
* @param array $data
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Framework\Registry $coreRegistry,
\Magento\Sales\Model\Config $salesConfig,
\Magento\Backend\Model\Session\Quote $quoteSession,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\DataObject\Copy $objectCopyService,
\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\Sales\Model\AdminOrder\Product\Quote\Initializer $quoteInitializer,
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
\Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
\Magento\Customer\Api\Data\AddressInterfaceFactory $addressFactory,
\Magento\Customer\Model\Metadata\FormFactory $metadataFormFactory,
\Magento\Customer\Api\GroupRepositoryInterface $groupRepository,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Sales\Model\AdminOrder\EmailSender $emailSender,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
\Magento\Quote\Model\Quote\Item\Updater $quoteItemUpdater,
\Magento\Framework\DataObject\Factory $objectFactory,
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
\Magento\Customer\Api\AccountManagementInterface $accountManagement,
\Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory,
\Magento\Customer\Model\Customer\Mapper $customerMapper,
\Magento\Quote\Api\CartManagementInterface $quoteManagement,
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
\Magento\Sales\Api\OrderManagementInterface $orderManagement,
\Magento\Quote\Model\QuoteFactory $quoteFactory,
array $data = []
) {
$this->_objectManager = $objectManager;
$this->_eventManager = $eventManager;
$this->_coreRegistry = $coreRegistry;
$this->_salesConfig = $salesConfig;
$this->_session = $quoteSession;
$this->_logger = $logger;
$this->_objectCopyService = $objectCopyService;
$this->quoteInitializer = $quoteInitializer;
$this->messageManager = $messageManager;
$this->customerRepository = $customerRepository;
$this->addressRepository = $addressRepository;
$this->addressFactory = $addressFactory;
$this->_metadataFormFactory = $metadataFormFactory;
$this->customerFactory = $customerFactory;
$this->groupRepository = $groupRepository;
$this->_scopeConfig = $scopeConfig;
$this->emailSender = $emailSender;
$this->stockRegistry = $stockRegistry;
$this->quoteItemUpdater = $quoteItemUpdater;
$this->objectFactory = $objectFactory;
$this->quoteRepository = $quoteRepository;
$this->accountManagement = $accountManagement;
$this->customerMapper = $customerMapper;
$this->quoteManagement = $quoteManagement;
$this->dataObjectHelper = $dataObjectHelper;
$this->orderManagement = $orderManagement;
$this->quoteFactory = $quoteFactory;
parent::__construct($data);
}
/**
*
*
* Here I may write my logic
*/
}
Solution
Here is complete working code you can use app/code/MyVendor/MyModule/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="MyVendor_MyModule" setup_version="1.0.0"></module>
<sequence>
<module name="Magento_Backend"/>
<module name="Magento_Sales"/>
<module name="Magento_Quote"/>
<module name="Magento_Checkout"/>
</sequence>
</config>
app/code/MyVendor/MyModule/etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Sales\Model\AdminOrder\Create" type="MyVendor\MyModule\Model\Magento\Sales\AdminOrder\Create" />
</config>
MyVendor\MyModule\Model\Magento\Sales\AdminOrder\Create.php
<?php
namespace MyVendor\MyModule\Model\Magento\Sales\AdminOrder;
class Create extends \Magento\Sales\Model\AdminOrder\Create
{
}
Hope it Helps !!
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange