Brincando com o Magento 2, mas me deparei com um problema que não consigo entender. O gerenciador de objetos tenta instanciar a classe Abstract, isso gera um erro fatal. Alguém sabe o que pode causar isso ou me aponta na direção certa?
O erro
Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75
O problema
Meu módulo possui um modelo que estende o \Magento\Quote\Model\Quote
. O construtor deste modelo tem a seguinte linha injetando isso:
\Magento\Framework\Model\Resource\AbstractResource $resource = null,
.
O controlador que está instanciando o modelo estende \Magento\Backend\App\Action
e usa $this->_objectManager->create()
para instanciar o modelo.
O que eu não consigo entender é que, se eu instanciar o modelo Magento, ele simplesmente funciona, mas se eu instanciar meu modelo, ele tenta instanciar essa classe abstrata, lançando o erro acima. O que instrui o gerenciador de objetos a fazer isso e como posso resolver meu problema?
Meu primeiro pensamento foi que o Magento usa o di.xml
para substituir isso, executar isso ou algo assim, esse não era o caso.
Obrigado por tomar o tempo para ler este. Qualquer ajuda ou contribuição sobre este assunto é apreciada.
fonte
__construct
método do seu modelo.Respostas:
Isso pode acontecer se sua subclasse tiver adicionado novas dependências após as dependências opcionais existentes da classe pai.
Snippet do pai
Como o código pode alterar o que é opcional
O Magento 2 Object Manager tentará injetar os parâmetros necessários. Portanto, isso pode acontecer se você adicionar um parâmetro necessário no final do construtor.
Você pode corrigir isso movendo qualquer novo parâmetro necessário acima dos opcionais.
fonte
Às vezes, algum módulo foi atualizado e as referências em / geradas ainda não foram atualizadas.
Basta fazer um
bin/magento setup:di:compile
e tente novamente.(Funcionou para mim ao atualizar um módulo de pagamento e / o checkout não foi carregado)
fonte