Error fatal: no se puede crear una instancia de la interfaz


12

Mi tienda magento está arrojando este error:

Error grave: no se puede crear una instancia de la interfaz Magento \ Framework \ View \ Design \ Theme \ ResolverInterface en /Library/WebServer/Documents/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php en la línea 73

No sé por qué comenzó a aparecer. No hice ninguna instalación de módulo nuevo. La tienda funcionaba bien.

Verifiqué los permisos de archivo y no veo ningún problema allí. También elimine / var / dir y, creo, todas las carpetas / archivos donde se crearon.

[EDITAR] La preferencia se define vendor / magento / magento2-base / app / etc / di.xml

<preference for="Magento\Framework\View\Design\Theme\ResolverInterface" type="Magento\Theme\Model\Theme\Resolver" /> 

1
Espero que en su módulo o código personalizado intente utilizar Magento \ Framework \ View \ Design \ Theme \ ResolverInterface en el constructor o administrador de objetos
Pradeep Kumar

@PradeepKumar No. No lo soy.
Filipe Sá

2
borre su caché y el contenido de var/generation.
Marius

@Marius como se indica en la pregunta, ya he eliminado la carpeta / var / * por completo.
Filipe Sá

Lo siento. Perdí esa línea.
Marius

Respuestas:


23

Si usa redis, ejecute:


redis-cli flushall



Si también usa un entorno como ansible ( lxc - server), deberá hacer ese comando en el contenedor. Además hice lo siguiente:

  • Claro var/generation
  • Claro var/cache
  • Habilitar módulos de Magento: bin/magento module:enable --all
  • Compilar DI bin/magento setup:di:compile

1
había tantas soluciones engañosas y esto funcionó de inmediato

3
Habilitar módulos Magento: módulo bin / magento: habilitar --todos - Trabajó para mí
Agnes

¡NO! ¡No es una buena práctica! bin / magento module: enable --all is like chmod -R 777 :(
Kārlis Millers

6

Tuve este error y se resolvió borrando la carpeta var y luego ejecutándolo setup:upgrade. Si esto no lo resuelve, busque errores en los di.xmlarchivos


trabajó para mí, en concretovar/cache
Joshua Soileau

Gracias redis-cli flushallfuncionó para mí.
Sarjan Gautam

5

Ejecute el siguiente comando y verifique.

rm -rf generated

rm -rf var/*

Trabajó para mi.


2

Esto funcionó para mí:

 sudo apt-get install php-intl

 sudo service apache2 reload

1

En mi caso, tuve que eliminar un módulo y simplemente eliminé los archivos del módulo sin seguir los métodos adecuados y luego este error apareció en la pantalla en todas partes. Después de buscar mucho, terminé por reemplazar los archivos del módulo nuevamente en el mismo directorio y eliminé todas las carpetas requeridas de var y ejecuté los siguientes comandos.

php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

y todo fue arreglado. Luego seguí formas adecuadas de quitar el módulo. Espero que esto ahorre tiempo a alguien. :-)


1

Borrar el caché rm -rf var/cache

Si redis está habilitado, borre redis db usando la línea de comando:

$> redis-cli
$> flushall

0
php bin/magento c:c
php bin/magento setup:di:compile

solucionará tu problema


0

Volcar el compositor de carga automática de archivos:

$ composer dumpautoload

Entonces:

bin/magento setup:upgrade
bin/magento setup:di:compile


0

Este error se crea cuando intenta crear (nuevo) un objeto (clase) que de hecho es una interfaz. Esto normalmente ocurre cuando no ha anulado la interfaz para una clase en el archivo di.xml. O ha anulado el en el di.xml en el directorio adminhtml y está intentando utilizar la interfaz en la interfaz.

interface MyInterface{
   pubic function getVariable(): int
}

class MyClass 
implements MyInterface{

   protected $variable;

   pubic function getVariable(){
      return $this->variable;
   }
}

$variable = new MyInterface();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.