Magento 2 - 개체 관리자가 추상 클래스를 인스턴스화하려고 시도합니다.( 치명적 오류 )
-
13-12-2019 - |
문제
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이 로드되지 않을 때 저에게 도움이 되었습니다)