I'm using Magento 2.4 and getting the following error on order submit. I did run rm -rf generated/code/* generated/metadata/* pub/static/* var/cache/* var/composer_home/* var/page_cache/* var/view_preprocessed/*
php -dmemory_limit=-1 bin/magento setup:upgrade && php -dmemory_limit=-1 bin/magento setup:di:compile && php -dmemory_limit=-1 bin/magento setup:static-content:deploy -f && php -dmemory_limit=-1 bin/magento c:c && php -dmemory_limit=-1 bin/magento c:f, but getting same error everytime.
Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\AbstractResource in /var/www/stage/releases/20220906152711/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:121 Stack trace: #0 /var/www/stage/releases/20220906152711/vendor/magento/framework/ObjectManager/Factory/Compiled.php(108): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject() #1 /var/www/stage/releases/20220906152711/vendor/magento/framework/ObjectManager/Factory/Compiled.php(150): Magento\Framework\ObjectManager\Factory\Compiled->create() #2 /var/www/stage/releases/20220906152711/vendor/magento/framework/ObjectManager/Factory/Compiled.php(79): Magento\Framework\ObjectManager\Factory\Compiled->get() #3 /var/www/stage/releases/20220906152711/vendor/magento/framework/ObjectManager/ObjectManager.php(56): Magento\Framework\ObjectManager\Factory\Compiled->create() #4 /var/www/stage/releases/20220906152711/generated/code/Rural/OracleOrderSync/Model/ResponseFactory.php(43): Magento\Framework\ObjectManager\ObjectManager->create() #5 /var/www/stage/releases/20220906152711/app/code/Rural/OracleOrderSync/Observer/OrderSuccess.php(66): Rural\OracleOrderSync\Model\ResponseFactory->create() #6 /var/www/stage/releases/20220906152711/vendor/magento/framework/Event/Invoker/InvokerDefault.php(88): Rural\OracleOrderSync\Observer\OrderSuccess->execute() #7 /var/www/stage/releases/20220906152711/vendor/magento/framework/Event/Invoker/InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod() #8 /var/www/stage/releases/20220906152711/vendor/magento/framework/Event/Manager.php(66): Magento\Framework\Event\Invoker\InvokerDefault->dispatch() #9 /var/www/stage/releases/20220906152711/generated/code/Magento/Framework/Event/Manager/Proxy.php(95): Magento\Framework\Event\Manager->dispatch() #10 /var/www/stage/releases/20220906152711/vendor/magento/module-sales/Model/AdminOrder/Create.php(2018): Magento\Framework\Event\Manager\Proxy->dispatch() #11 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Sales\Model\AdminOrder\Create->createOrder() #12 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Sales\Model\AdminOrder\Create\Interceptor->___callParent() #13 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Sales\Model\AdminOrder\Create\Interceptor->Magento\Framework\Interception\{closure}() #14 /var/www/stage/releases/20220906152711/generated/code/Magento/Sales/Model/AdminOrder/Create/Interceptor.php(32): Magento\Sales\Model\AdminOrder\Create\Interceptor->___callPlugins() #15 /var/www/stage/releases/20220906152711/vendor/magento/module-sales/Controller/Adminhtml/Order/Create/Save.php(52): Magento\Sales\Model\AdminOrder\Create\Interceptor->createOrder() #16 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Sales\Controller\Adminhtml\Order\Create\Save->execute() #17 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->___callParent() #18 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->Magento\Framework\Interception\{closure}() #19 /var/www/stage/releases/20220906152711/generated/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save/Interceptor.php(23): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->___callPlugins() #20 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/Action/Action.php(111): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->execute() #21 /var/www/stage/releases/20220906152711/vendor/magento/module-backend/App/AbstractAction.php(151): Magento\Framework\App\Action\Action->dispatch() #22 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Backend\App\AbstractAction->dispatch() #23 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->___callParent() #24 /var/www/stage/releases/20220906152711/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(145): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->Magento\Framework\Interception\{closure}() #25 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() #26 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->Magento\Framework\Interception\{closure}() #27 /var/www/stage/releases/20220906152711/generated/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save/Interceptor.php(32): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->___callPlugins() #28 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/FrontController.php(245): Magento\Sales\Controller\Adminhtml\Order\Create\Save\Interceptor->dispatch() #29 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/FrontController.php(212): Magento\Framework\App\FrontController->getActionResponse() #30 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/FrontController.php(147): Magento\Framework\App\FrontController->processRequest() #31 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch() #32 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent() #33 /var/www/stage/releases/20220906152711/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() #34 /var/www/stage/releases/20220906152711/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins() #35 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch() #36 /var/www/stage/releases/20220906152711/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch() #37 /var/www/stage/releases/20220906152711/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch() #38 /var/www/stage/releases/20220906152711/pub/index.php(30): Magento\Framework\App\Bootstrap->run() #39 {main}
Rural\OracleOrderSync\Model\Response
<?php declare(strict_types=1); namespace Rural\OracleOrderSync\Model; use Magento\Framework\Data\Collection\AbstractDb; use Magento\Framework\Model\AbstractModel; use Magento\Framework\Model\Context; use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\Registry; use Magento\Framework\Stdlib\DateTime; class Response extends AbstractModel { /** * @var DateTime */ private $dateTime; public function __construct( Context $context, Registry $registry, AbstractResource $resource = null, AbstractDb $resourceCollection = null, DateTime $dateTime, array $data = [] ) { $this->dateTime = $dateTime; parent::__construct($context, $registry, $resource, $resourceCollection, $data); } /** * Constructor * * @return void */ protected function _construct() { parent::_construct(); $this->_init('Rural\OracleOrderSync\Model\Resource\Response'); } /** * Prepare data to be saved to database. * * @return $this */ public function beforeSave() { parent::beforeSave(); $this->setUpdatedAt($this->dateTime->formatDate(true)); return $this; } }
Rural\OracleOrderSync\Observer\OrderSuccess
<?php declare(strict_types=1); namespace Rural\OracleOrderSync\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Sales\Model\Order; use Psr\Log\LoggerInterface; use Rural\OracleOrderSync\Model\ResponseFactory; use Rural\OracleOrderSync\Model\Config; class OrderSuccess implements ObserverInterface { /** @var LoggerInterface */ private $logger; /** * @var ResponseFactory */ private $responseFactory; /** * @var Config */ private $config; /** * OrderSuccess constructor. * @param LoggerInterface $logger * @param Config $config * @param ResponseFactory $responseFactory */ public function __construct( LoggerInterface $logger, Config $config, ResponseFactory $responseFactory ) { $this->logger = $logger; $this->config = $config; $this->responseFactory = $responseFactory; } /** * @param Observer $observer */ public function execute(Observer $observer): void { try { if (!$this->config->isOracleOrderSyncEnabled()) { $this->logger->info("Oracle Order sync module is Disabled"); return; } /** @var Order $order */ $orders = $observer->getData('orders'); if (empty($orders)) { $orders[] = $observer->getData('order'); } foreach ($orders as $order) { if (!$order instanceof Order) { continue; } $order_id = $order->getId(); $this->logger->info("From Observer: Order id is " . $order_id); $response = $this->responseFactory->create(); $response->addData([ "order_id" => $order_id, "confirm_no" => 0, "sync_status" => 0, "sync_retries" => 0, "cutover_order" => $this->cutOverOrder(), "increment_id" => $order->getIncrementId() ]); $response->save(); } } catch (\Exception $e) { $this->logger->error( $e->getMessage(), [ 'File' => $e->getFile(), 'Line' => $e->getLine(), 'Trace' => $e->getTrace() ] ); } } /** * cutover order flag * @return int */ public function cutOverOrder() { $cutover_order_status = 0; if (!$this->config->isPublishOracleMessageEnable()) { $cutover_order_status = 1; } return $cutover_order_status; } }
Hello @Partab Saif
This error belongs to constructor only. We need to pass all variables to parent class for resolve. Example :
public function __construct( Context $context, Registry $registry, AbstractResource $resource = null, AbstractDb $resourceCollection = null, DateTime $dateTime, array $data = [] ) { $this->dateTime = $dateTime; parent::__construct($context, $registry, $resource, $resourceCollection,$dateTime, $data); }
You can take reference of above code and pass variable through parent::__constructur().
please check all constructor of your files.
@Partab Saif Did you ever find a resolution for this error? I'm experiencing an identical issue after upgrading to 2.4.4p2.
Thanks for your time and feedback!
FYI - My issue was resolved when I fixed a PHP 8.1 warning: "Optional parameter is provided before required"
I just re-arranged the parameters in my __construct(...) 👍