Pregunta

Estoy jugando con Magento 2 pero me encuentro con un problema que no puedo entender.El administrador de objetos intenta crear una instancia de la clase abstracta, lo que genera un error fatal.¿Alguien sabe qué podría causar esto o indicarme la dirección correcta?

El error

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

El problema

Mi módulo tiene un modelo que extiende el \Magento\Quote\Model\Quote.El constructor de este modelo tiene la siguiente línea inyectando esto:

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

El controlador que está creando una instancia del modelo extiende el \Magento\Backend\App\Action y usos $this->_objectManager->create() para instanciar el modelo.

Lo que no puedo entender es que si creo una instancia del modelo Magento, simplemente funciona, pero si creo una instancia de mi modelo, intenta crear una instancia de esta clase abstracta arrojando el error anterior.¿Qué le dice al administrador de objetos que haga esto y cómo puedo resolver mi problema?

Lo primero que pensé fue que Magento usa el di.xml para reemplazar esto, ejecutar esto o algo así, este no fue el caso.

Gracias por tomarse el tiempo de leer esto.Se agradece cualquier ayuda o aportación sobre este tema.

¿Fue útil?

Solución

Esto puede suceder si su subclase agregó nuevas dependencias después de las dependencias opcionales existentes de la clase principal.

Fragmento de los padres

    \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
)}

Cómo el código podría alterar lo que es opcional

    \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
)}

El Administrador de objetos de Magento 2 intentará inyectar los parámetros necesarios.Entonces esto podría suceder si agregas un parámetro requerido al final del constructor.

Puede solucionar este problema moviendo cualquier nuevo parámetro requerido por encima de los opcionales.

Otros consejos

A veces se actualizó algún módulo y las referencias en /generado aún no se actualizaron.

solo haz un bin/magento setup:di:compile e intenta de nuevo.

(Me funcionó al actualizar un módulo de pago y /checkout no se cargó)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top