cancel
Showing results for 
Search instead for 
Did you mean: 

Magento 2: Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\AbstractRe

Magento 2: Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\AbstractRe

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;
    }
}

 

3 REPLIES 3

Re: Magento 2: Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\Abstra

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.

Problem solved? Click Accept as Solution!

Re: Magento 2: Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\Abstra

@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!

Re: Magento 2: Error: Cannot instantiate abstract class Magento\Framework\Model\ResourceModel\Abstra

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