Magento 2 — менеджер объектов пытается создать экземпляр абстрактного класса.( Фатальная ошибка )

magento.stackexchange https://magento.stackexchange.com//questions/76584

Вопрос

Играюсь с Magento 2, но столкнулся с проблемой, которую не могу понять.Диспетчер объектов пытается создать экземпляр абстрактного класса, что приводит к фатальной ошибке.Кто-нибудь знает, что может вызвать это или указать мне в правильном направлении?

Ошибка

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

Проблема

Мой модуль имеет модель, которая расширяет \Magento\Quote\Model\Quote.В конструкторе этой модели есть следующая строка, внедряющая это:

\Magento\Framework\Model\Resource\AbstractResource $resource = null,.

Контроллер, создающий экземпляр модели, расширяет \Magento\Backend\App\Action и использует $this->_objectManager->create() для создания экземпляра модели.

Я не могу понять, что если я создаю экземпляр модели Magento, она просто работает, но если я создаю экземпляр своей модели, он пытается создать экземпляр этого абстрактного класса, выдавая ошибку выше.Что говорит диспетчеру объектов сделать это и как я могу решить свою проблему?

Моей первой мыслью было то, что Magento использует di.xml чтобы заменить это, выполнить это или что-то в этом роде, такого не было.

Спасибо, что нашли время прочитать это.Любая помощь или вклад по этому вопросу приветствуются.

Это было полезно?

Решение

Это может произойти, если ваш подкласс добавил новые зависимости после существующих необязательных зависимостей родительского класса.

Фрагмент от родителя

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

Как код может изменить то, что необязательно

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

Менеджер объектов Magento 2 попытается ввести все необходимые параметры.Это могло произойти, если вы добавили обязательный параметр в конец конструктора.

Вы можете исправить это, переместив любой новый обязательный параметр выше необязательных.

Другие советы

Иногда какой-то модуль был обновлен, а ссылки в разделе /generated еще не были обновлены.

Просто сделай bin/magento setup:di:compile и попробуй еще раз.

(У меня сработало при обновлении платежного модуля и /checkout не загрузился)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top