마 젠토 2-객체 관리자가 추상 클래스를 인스턴스화하려고합니다. ( 치명적 오류 )


37

Magento 2를 가지고 놀다가 문제가 발생하면 머리를 감쌀 수 없습니다. 객체 관리자가 Abstract 클래스를 인스턴스화하려고 시도하면 치명적 오류가 발생합니다. 누군가 이것이 이것을 일으키는 원인을 알거나 올바른 방향으로 나를 가리킬 수 있습니까?

오류

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이것을 대체하고 이것을 실행하거나 무언가를 실행하는 것이 었습니다.

읽어 주셔서 감사합니다. 이 문제에 대한 도움이나 의견을 보내주십시오.


질문에 코드를 게시 할 수 있습니까?
Marius

좀 더 구체적으로 말씀해 주시겠습니까? 전체 컨트롤러 클래스와 인스턴스화 된 모델은 크기가 커서 질문에 추가해도 초기 문제를 이해하기가 쉽지 않습니다. 액션 함수 또는 생성자만으로 충분합니까?
rofavadeka

그럴 수 있지. 클래스 이름, 확장 대상, 구현 대상 및 __construct모델 의 메소드를 게시하십시오 .
Marius

요청대로 :) 모델의 상단 부분. Chris가 해결책을 가지고 있다고 생각합니다. 이것을 테스트하고 다시 연락 드리겠습니다. 고마워 마리우스.
rofavadeka

네. 크리스가 알아 낸 것 같아 :)
Marius

답변:


109

하위 클래스가 부모 클래스의 기존 선택적 종속성 뒤에 새 종속성을 추가 한 경우 이런 일이 발생할 수 있습니다.

부모의 스 니펫

    \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 개체 관리자는 필요한 매개 변수를 주입하려고 시도합니다. 따라서 생성자 끝에 필수 매개 변수를 추가 한 경우 이런 일이 발생할 수 있습니다.

새로운 필수 매개 변수를 선택적 매개 변수 위로 이동하여이 문제를 해결할 수 있습니다.


1
크리스, 당신은 엄청난 감사를 받았습니다! 당신은 내 문제를 크게 해결했습니다.
rofavadeka

그리고 두 번째 큰 감사합니다. 나는 당신을 사랑합니다
Yonn Trimoreau

@Chris 솔루션 제공 감사합니다.
Mukesh

대단한 설명!
헨리 부이

/ : 내 문제는 phpStorm에 자동 완성 기능을 사용하는 경우 그것은 또한 = 널 부분 가져 실패했습니다
오지

0

때때로 일부 모듈이 업데이트되었고 / generated 아래의 참조가 아직 업데이트되지 않았습니다.

그냥 bin/magento setup:di:compile하고 다시 시도하십시오.

(결제 모듈을 업데이트 할 때 나를 위해 일했고 / checkout 이로 드되지 않았습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.