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(...) 👍